#define MESSAGE_SERVER_SPAM_REJECT 1 #define MESSAGE_SERVER_DEFAULT_SPAM_LIMIT 10 var/global/list/obj/machinery/message_server/message_servers = list() /datum/data_pda_msg var/recipient = "Unspecified" //name of the person var/sender = "Unspecified" //name of the sender var/message = "Blank" //transferred message /datum/data_pda_msg/New(var/param_rec = "",var/param_sender = "",var/param_message = "") if(param_rec) recipient = param_rec if(param_sender) sender = param_sender if(param_message) message = param_message /datum/data_rc_msg var/rec_dpt = "Unspecified" //name of the person var/send_dpt = "Unspecified" //name of the sender var/message = "Blank" //transferred message var/stamp = "Unstamped" var/id_auth = "Unauthenticated" var/priority = "Normal" /datum/data_rc_msg/New(var/param_rec = "",var/param_sender = "",var/param_message = "",var/param_stamp = "",var/param_id_auth = "",var/param_priority) if(param_rec) rec_dpt = param_rec if(param_sender) send_dpt = param_sender if(param_message) message = param_message if(param_stamp) stamp = param_stamp if(param_id_auth) id_auth = param_id_auth if(param_priority) switch(param_priority) if(1) priority = "Normal" if(2) priority = "High" if(3) priority = "Extreme" else priority = "Undetermined" /obj/machinery/message_server icon = 'icons/obj/machines/research.dmi' icon_state = "server" name = "Messaging Server" density = 1 anchored = 1.0 use_power = 1 idle_power_usage = 10 active_power_usage = 100 var/list/datum/data_pda_msg/pda_msgs = list() var/list/datum/data_rc_msg/rc_msgs = list() var/active = 1 var/decryptkey = "password" //Spam filtering stuff var/list/spamfilter = list("You have won", "your prize", "male enhancement", "shitcurity", \ "are happy to inform you", "account number", "enter your PIN") //Messages having theese tokens will be rejected by server. Case sensitive var/spamfilter_limit = MESSAGE_SERVER_DEFAULT_SPAM_LIMIT //Maximal amount of tokens /obj/machinery/message_server/New() message_servers += src decryptkey = GenerateKey() send_pda_message("System Administrator", "system", "This is an automated message. The messaging system is functioning correctly.") ..() return /obj/machinery/message_server/Destroy() message_servers -= src return ..() /obj/machinery/message_server/proc/GenerateKey() //Feel free to move to Helpers. var/newKey newKey += pick("the", "if", "of", "as", "in", "a", "you", "from", "to", "an", "too", "little", "snow", "dead", "drunk", "rosebud", "duck", "al", "le") newKey += pick("diamond", "beer", "mushroom", "assistant", "clown", "captain", "twinkie", "security", "nuke", "small", "big", "escape", "yellow", "gloves", "monkey", "engine", "nuclear", "ai") newKey += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") return newKey /obj/machinery/message_server/machinery_process() //if(decryptkey == "password") // decryptkey = generateKey() if(active && (stat & (BROKEN|NOPOWER))) active = 0 return update_icon() return /obj/machinery/message_server/proc/send_pda_message(var/recipient = "",var/sender = "",var/message = "") var/result for (var/token in spamfilter) if (findtextEx(message,token)) message = "[message]" //Rejected messages will be indicated by red color. result = token //Token caused rejection (if there are multiple, last will be chosen>. pda_msgs += new/datum/data_pda_msg(recipient,sender,message) return result /obj/machinery/message_server/proc/send_rc_message(var/recipient = "",var/sender = "",var/message = "",var/stamp = "", var/id_auth = "", var/priority = 1) rc_msgs += new/datum/data_rc_msg(recipient,sender,message,stamp,id_auth) var/authmsg = "[message]
" if (id_auth) authmsg += "[id_auth]
" if (stamp) authmsg += "[stamp]
" for (var/obj/machinery/requests_console/Console in allConsoles) if (ckey(Console.department) == ckey(recipient)) if(Console.inoperable()) Console.message_log += "Message lost due to console failure.
Please contact [station_name()] system adminsitrator or AI for technical assistance.
" continue if(Console.newmessagepriority < priority) Console.newmessagepriority = priority Console.icon_state = "req_comp[priority]" switch(priority) if(2) if(!Console.silent) playsound(Console.loc, 'sound/machines/twobeep.ogg', 50, 1) Console.audible_message(text("\icon[Console] *The Requests Console beeps: 'PRIORITY Alert in [sender]'"),,5) Console.message_log += "High Priority message from [sender]
[authmsg]" else if(!Console.silent) playsound(Console.loc, 'sound/machines/twobeep.ogg', 50, 1) Console.audible_message(text("\icon[Console] *The Requests Console beeps: 'Message from [sender]'"),,4) Console.message_log += "Message from [sender]
[authmsg]" Console.set_light(2) /obj/machinery/message_server/attack_hand(user as mob) // user << "\blue There seem to be some parts missing from this server. They should arrive on the station in a few days, give or take a few CentCom delays." user << "You toggle PDA message passing from [active ? "On" : "Off"] to [active ? "Off" : "On"]" active = !active update_icon() return /obj/machinery/message_server/attackby(obj/item/weapon/O as obj, mob/living/user as mob) if (active && !(stat & (BROKEN|NOPOWER)) && (spamfilter_limit < MESSAGE_SERVER_DEFAULT_SPAM_LIMIT*2) && \ istype(O,/obj/item/weapon/circuitboard/message_monitor)) spamfilter_limit += round(MESSAGE_SERVER_DEFAULT_SPAM_LIMIT / 2) user.drop_from_inventory(O,get_turf(src)) qdel(O) user << "You install additional memory and processors into message server. Its filtering capabilities been enhanced." else ..(O, user) /obj/machinery/message_server/update_icon() if((stat & (BROKEN|NOPOWER))) icon_state = "server-nopower" else if (!active) icon_state = "server-off" else icon_state = "server-on" var/obj/machinery/blackbox_recorder/blackbox /obj/machinery/blackbox_recorder icon = 'icons/obj/stationobjs.dmi' icon_state = "blackbox" name = "Blackbox Recorder" density = 1 anchored = 1.0 use_power = 1 idle_power_usage = 10 active_power_usage = 100 // Note: actual logging has been moved to SSfeedback. //Only one can exist in the world! /obj/machinery/blackbox_recorder/Initialize() . = ..() if(blackbox) if(istype(blackbox,/obj/machinery/blackbox_recorder)) qdel(src) blackbox = src /obj/machinery/blackbox_recorder/Destroy() feedback_set_details("blackbox_destroyed","true") feedback_set("blackbox_destroyed",1) return ..()