mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 02:09:41 +00:00
Blank Mail Envelopes (#8621)
This commit is contained in:
@@ -7,6 +7,7 @@ SUBSYSTEM_DEF(mail)
|
||||
|
||||
var/mail_waiting = 0 // Pending mail
|
||||
var/mail_per_process = 0.45 // Mail to be generated
|
||||
var/admin_mail = list() // Mail added by Spawn Mail
|
||||
|
||||
/datum/controller/subsystem/mail/fire()
|
||||
mail_waiting += mail_per_process
|
||||
@@ -42,5 +43,10 @@ SUBSYSTEM_DEF(mail)
|
||||
mail_recipients -= mail_to
|
||||
else
|
||||
new_mail.junk_mail()
|
||||
// Admin mail
|
||||
if(admin_mail)
|
||||
for(var/obj/item/mail/ad_mail in admin_mail)
|
||||
ad_mail.loc = mailcrate
|
||||
clearlist(admin_mail)
|
||||
mail_waiting = 0
|
||||
return mailcrate
|
||||
|
||||
@@ -44,6 +44,11 @@
|
||||
var/stamp_offset_y = 2
|
||||
var/opening = FALSE
|
||||
|
||||
/obj/item/mail/container_resist(mob/living/M)
|
||||
if(istype(M, /mob/living/voice)) return
|
||||
M.forceMove(get_turf(src))
|
||||
to_chat(M, span_warning("You climb out of \the [src]."))
|
||||
|
||||
/obj/item/mail/envelope
|
||||
name = "envelope"
|
||||
icon_state = "mail_large"
|
||||
@@ -62,6 +67,76 @@
|
||||
for(var/i = 1, i <= stamp_count, i++)
|
||||
stamps += list("stamp_[rand(2, 8)]")
|
||||
|
||||
/obj/item/mail/blank
|
||||
desc = "A blank envelope."
|
||||
description_info = "An object can be placed into the envelope, click on it with an empty hand to seal it. Alt-Click to retrieve the items from inside before sealing."
|
||||
stamped = FALSE
|
||||
postmarked = FALSE
|
||||
var/set_recipient = FALSE
|
||||
var/set_content = FALSE
|
||||
var/sealed = FALSE
|
||||
var/list/mail_recipients = list()
|
||||
|
||||
/obj/item/mail/blank/attackby(obj/item/W, mob/user)
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/pen) && sealed && !set_recipient)
|
||||
if(setRecipient(user))
|
||||
set_recipient = TRUE
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
if(!set_content && !sealed)
|
||||
if(!do_after(user, 1.5 SECONDS, target = user))
|
||||
set_content = FALSE
|
||||
user.drop_item()
|
||||
W.forceMove(src)
|
||||
balloon_alert(user, "Placed the [W] into the [src]")
|
||||
set_content = TRUE
|
||||
description_info = "Click with an empty hand to seal it, or Alt-Click to retrieve the object out."
|
||||
return
|
||||
return
|
||||
|
||||
/obj/item/mail/proc/setRecipient(mob/user)
|
||||
var/list/recipients = list()
|
||||
for(var/mob/living/player in player_list)
|
||||
if(!player_is_antag(player.mind) && player.mind.show_in_directory)
|
||||
recipients += player
|
||||
|
||||
recipients = tgui_input_list(usr, "Choose recipient", "Recipients", recipients, recipients)
|
||||
|
||||
if(recipients)
|
||||
initialize_for_recipient(recipients, preset_goodies = TRUE)
|
||||
return TRUE
|
||||
|
||||
/obj/item/mail/blank/AltClick(mob/user)
|
||||
if(sealed)
|
||||
return
|
||||
|
||||
for(var/obj/stuff as anything in contents)
|
||||
if(isitem(stuff))
|
||||
user.put_in_hands(stuff)
|
||||
else
|
||||
stuff.forceMove(drop_location())
|
||||
set_content = FALSE
|
||||
description_info = initial(description_info)
|
||||
|
||||
/obj/item/mail/blank/ShiftClick(mob/user)
|
||||
..()
|
||||
if(!sealed)
|
||||
var/sender = tgui_input_text(user, "Write name", "Name", user.name)
|
||||
if(sender)
|
||||
desc = "A signed envelope, from [sender]."
|
||||
|
||||
/obj/item/mail/blank/attack_self(mob/user)
|
||||
if(!sealed)
|
||||
balloon_alert(user, "Sealing the envelope...")
|
||||
if(!do_after(user, 1.5 SECONDS, target = user))
|
||||
sealed = FALSE
|
||||
sealed = TRUE
|
||||
description_info = "Shift Click to add the sender's name to the envelope, or attack with a pen to set a receiver."
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/obj/item/mail/update_icon()
|
||||
. = ..()
|
||||
var/bonus_stamp_offset = 0
|
||||
@@ -132,7 +207,7 @@
|
||||
playsound(loc, 'sound/items/poster_ripped.ogg', 100, TRUE)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/mail/proc/initialize_for_recipient(mob/new_recipient)
|
||||
/obj/item/mail/proc/initialize_for_recipient(mob/new_recipient, var/preset_goodies = FALSE)
|
||||
recipient = new_recipient
|
||||
var/current_title = new_recipient.mind.role_alt_title ? new_recipient.mind.role_alt_title : new_recipient.mind.assigned_role
|
||||
name = "[initial(name)] for [new_recipient.real_name] ([current_title])"
|
||||
@@ -144,6 +219,7 @@
|
||||
var/image/envelope = image(icon, icon_state)
|
||||
envelope.color = this_job.get_mail_color()
|
||||
add_overlay(envelope)
|
||||
if(!preset_goodies)
|
||||
var/list/job_goodies = this_job.get_mail_goodies(new_recipient, current_title)
|
||||
if(LAZYLEN(job_goodies))
|
||||
if(this_job.exclusive_mail_goodies)
|
||||
@@ -151,10 +227,12 @@
|
||||
else
|
||||
goodies += job_goodies
|
||||
|
||||
if(!preset_goodies)
|
||||
for(var/iterator in 1 to goodie_count)
|
||||
var/target_good = pickweight(goodies)
|
||||
var/atom/movable/target_atom = new target_good(src)
|
||||
log_game("[key_name(new_recipient)] received [target_atom.name] in the mail ([target_good])")
|
||||
|
||||
update_icon()
|
||||
return TRUE
|
||||
|
||||
@@ -163,6 +241,54 @@
|
||||
if(!hasmob)
|
||||
disposal_holder.destinationTag = sortTag
|
||||
|
||||
// Mail spawn for events
|
||||
/datum/admins/proc/spawn_mail(var/object as text)
|
||||
set name = "Spawn Mail"
|
||||
set category = "Fun.Event Kit"
|
||||
set desc = "Spawn mail for a specific player, with a specific item."
|
||||
|
||||
if(!check_rights(R_SPAWN)) return
|
||||
|
||||
var/obj/item/mail/new_mail = new
|
||||
var/list/types = typesof(/atom)
|
||||
var/list/matches = new()
|
||||
var/list/recipients = list()
|
||||
|
||||
for(var/path in types)
|
||||
if(findtext("[path]", object))
|
||||
matches += path
|
||||
|
||||
if(matches.len==0)
|
||||
return
|
||||
var/chosen
|
||||
if(matches.len==1)
|
||||
chosen = matches[1]
|
||||
else
|
||||
chosen = tgui_input_list(usr, "Select an atom type", "Spawn Atom in Mail", matches)
|
||||
if(!chosen)
|
||||
return
|
||||
|
||||
for(var/mob/living/player in player_list)
|
||||
recipients += player
|
||||
|
||||
recipients = tgui_input_list(usr, "Choose recipient", "Recipients", recipients, recipients)
|
||||
|
||||
if(recipients)
|
||||
new_mail.initialize_for_recipient(recipients, TRUE)
|
||||
new chosen(new_mail)
|
||||
|
||||
var/shuttle_spawn = tgui_alert(usr, "Spawn mail at location or in the shuttle?", "Spawn mail", list("Location", "Shuttle"))
|
||||
if(shuttle_spawn == "Shuttle")
|
||||
SSmail.admin_mail += new_mail
|
||||
log_and_message_admins("spawned [chosen] inside an envelope at the shuttle")
|
||||
else
|
||||
var/obj/item/mail/ground_mail = new /obj/item/mail(usr.loc)
|
||||
ground_mail.initialize_for_recipient(recipients, TRUE)
|
||||
new chosen(ground_mail)
|
||||
log_and_message_admins("spawned [chosen] inside an envelope at ([usr.x],[usr.y],[usr.z])")
|
||||
|
||||
feedback_add_details("admin_verb","SE")
|
||||
|
||||
// Mail Crate
|
||||
/obj/structure/closet/crate/mail
|
||||
name = "mail crate"
|
||||
|
||||
@@ -189,6 +189,7 @@ var/list/admin_verbs_spawn = list(
|
||||
/datum/admins/proc/check_custom_items,
|
||||
/datum/admins/proc/spawn_plant,
|
||||
/datum/admins/proc/spawn_atom, //allows us to spawn instances,
|
||||
/datum/admins/proc/spawn_mail, // CHOMPStation Add
|
||||
/client/proc/cmd_admin_droppod_spawn,
|
||||
/client/proc/respawn_character,
|
||||
/client/proc/spawn_character_mob, //VOREStation Add,
|
||||
|
||||
@@ -1786,6 +1786,21 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/closet/crate/mail,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/turf/simulated/floor/tiled,
|
||||
/area/quartermaster/delivery)
|
||||
"ahk" = (
|
||||
@@ -32239,6 +32254,7 @@
|
||||
pixel_x = -5;
|
||||
pixel_y = -5
|
||||
},
|
||||
/obj/item/mail/blank,
|
||||
/turf/simulated/floor/tiled,
|
||||
/area/quartermaster/delivery)
|
||||
"vbP" = (
|
||||
|
||||
@@ -24599,6 +24599,8 @@
|
||||
/obj/effect/floor_decal/corner/brown/border{
|
||||
dir = 9
|
||||
},
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/turf/simulated/floor/tiled,
|
||||
/area/quartermaster/office)
|
||||
"bxA" = (
|
||||
@@ -26628,6 +26630,7 @@
|
||||
/obj/effect/floor_decal/corner/brown/border{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/mail/blank,
|
||||
/turf/simulated/floor/tiled,
|
||||
/area/quartermaster/office)
|
||||
"bCU" = (
|
||||
@@ -55322,6 +55325,11 @@
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/turf/simulated/floor/wood/alt/parquet,
|
||||
/area/library)
|
||||
"iQe" = (
|
||||
@@ -61001,6 +61009,9 @@
|
||||
pixel_y = 5
|
||||
},
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/obj/item/mail/blank,
|
||||
/turf/simulated/floor/carpet,
|
||||
/area/hallway/secondary/entry/docking_lounge)
|
||||
"lVD" = (
|
||||
|
||||
12
modular_chomp/code/datums/supplypacks/supply.dm
Normal file
12
modular_chomp/code/datums/supplypacks/supply.dm
Normal file
@@ -0,0 +1,12 @@
|
||||
/datum/supply_pack/supply/postal_service
|
||||
name = "Postal Service Supplies"
|
||||
contains = list(
|
||||
/obj/item/mail/blank = 10,
|
||||
/obj/item/weapon/pen/fountain,
|
||||
/obj/item/weapon/pen/multi,
|
||||
/obj/item/device/destTagger,
|
||||
/obj/item/weapon/storage/bag/mail
|
||||
)
|
||||
cost = 15
|
||||
containertype = /obj/structure/closet/crate/nanotrasen
|
||||
containername = "Postal Service crate"
|
||||
@@ -4705,6 +4705,7 @@
|
||||
#include "modular_chomp\code\datums\supplypacks\misc.dm"
|
||||
#include "modular_chomp\code\datums\supplypacks\science.dm"
|
||||
#include "modular_chomp\code\datums\supplypacks\security.dm"
|
||||
#include "modular_chomp\code\datums\supplypacks\supply.dm"
|
||||
#include "modular_chomp\code\datums\underwear\socks.dm"
|
||||
#include "modular_chomp\code\game\atoms\atoms.dm"
|
||||
#include "modular_chomp\code\game\gamemodes\meteor\meteors.dm"
|
||||
|
||||
Reference in New Issue
Block a user