From fe4d28a376b5ab855d663dc1b28aba564a25f988 Mon Sep 17 00:00:00 2001 From: Aranclanos Date: Tue, 19 May 2015 09:32:46 -0300 Subject: [PATCH] Newscaster code big cleanup. Removes lots of copypaste. Admin newscaster barely modified, they still are a gigantic copypaste from the topic.dm() of the newscaster object. Printed diaries will now only report the information available when they were printed, including wanted status and the different types of censorship. All datums are now under /datum/newscaster Wanted is now a different type of datum, /datum/newscaster/wanted_message Fixed a bug where you couldn't censor normal submissions, made by crewmembers. Fixes #944 --- code/game/machinery/newscaster.dm | 1015 +++++++++---------- code/game/objects/items/devices/PDA/cart.dm | 14 +- code/modules/admin/admin.dm | 64 +- code/modules/admin/holder2.dm | 9 +- code/modules/admin/topic.dm | 98 +- 5 files changed, 560 insertions(+), 640 deletions(-) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index cd04b4d4a43..5c3e80e238d 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -1,70 +1,123 @@ -//############################################## -//################### NEWSCASTERS BE HERE! #### -//###-Agouri################################### +var/datum/newscaster/feed_network/news_network = new /datum/newscaster/feed_network +var/list/obj/machinery/newscaster/allCasters = list() -/datum/feed_comment +/datum/newscaster + +/datum/newscaster/feed_comment var/author = "" var/body = "" var/time_stamp = "" -/datum/feed_message +/datum/newscaster/feed_message var/author ="" var/body ="" - //var/parent_channel - var/backup_body ="" - var/backup_author ="" + var/list/authorCensorTime = list() + var/list/bodyCensorTime = list() var/is_admin_message = 0 var/icon/img = null var/time_stamp = "" - var/list/datum/feed_comment/comments = list() + var/list/datum/newscaster/feed_comment/comments = list() var/locked = 0 var/caption = "" + var/creationTime + var/authorCensor + var/bodyCensor -/datum/feed_channel - var/channel_name="" - var/list/datum/feed_message/messages = list() - //var/message_count = 0 - var/locked=0 - var/author="" - var/backup_author="" - var/censored=0 - var/is_admin_channel=0 - //var/page = null //For newspapers +/datum/newscaster/feed_message/proc/returnAuthor(censor) + if(censor == -1) + censor = authorCensor + var/txt = "[news_network.redactedText]" + if(!censor) + txt = author + return txt -/datum/feed_message/proc/clear() - src.author = "" - src.body = "" - src.backup_body = "" - src.backup_author = "" - src.img = null - src.locked = 0 +/datum/newscaster/feed_message/proc/returnBody(censor) + if(censor == -1) + censor = bodyCensor + var/txt = "[news_network.redactedText]" + if(!censor) + txt = body + return txt -/datum/feed_channel/proc/clear() - src.channel_name = "" - src.messages = list() - src.locked = 0 - src.author = "" - src.backup_author = "" - src.censored = 0 - src.is_admin_channel = 0 +/datum/newscaster/feed_message/proc/toggleCensorAuthor() + if(authorCensor) + authorCensorTime.Add(news_network.lastAction*-1) + else + authorCensorTime.Add(news_network.lastAction) + authorCensor = !authorCensor + news_network.lastAction ++ -/datum/feed_network - var/list/datum/feed_channel/network_channels = list() - var/datum/feed_message/wanted_issue +/datum/newscaster/feed_message/proc/toggleCensorBody() + if(bodyCensor) + bodyCensorTime.Add(news_network.lastAction*-1) + else + bodyCensorTime.Add(news_network.lastAction) + bodyCensor = !bodyCensor + news_network.lastAction ++ -/datum/feed_network/New() +/datum/newscaster/feed_channel + var/channel_name = "" + var/list/datum/newscaster/feed_message/messages = list() + var/locked = 0 + var/author = "" + var/censored = 0 + var/list/authorCensorTime = list() + var/list/DclassCensorTime = list() + var/authorCensor + var/is_admin_channel = 0 + +/datum/newscaster/feed_channel/proc/returnAuthor(censor) + if(censor == -1) + censor = authorCensor + var/txt = "[news_network.redactedText]" + if(!censor) + txt = author + return txt + +/datum/newscaster/feed_channel/proc/toggleCensorDclass() + if(censored) + DclassCensorTime.Add(news_network.lastAction*-1) + else + DclassCensorTime.Add(news_network.lastAction) + censored = !censored + news_network.lastAction ++ + +/datum/newscaster/feed_channel/proc/toggleCensorAuthor() + if(authorCensor) + authorCensorTime.Add(news_network.lastAction*-1) + else + authorCensorTime.Add(news_network.lastAction) + authorCensor = !authorCensor + news_network.lastAction ++ + +/datum/newscaster/wanted_message + var/active + var/criminal + var/body + var/scannedUser + var/isAdminMsg + var/icon/img + +/datum/newscaster/feed_network + var/list/datum/newscaster/feed_channel/network_channels = list() + var/datum/newscaster/wanted_message/wanted_issue + var/lastAction + var/redactedText = "\[REDACTED\]" + +/datum/newscaster/feed_network/New() CreateFeedChannel("Station Announcements", "SS13", 1) + wanted_issue = new /datum/newscaster/wanted_message -/datum/feed_network/proc/CreateFeedChannel(var/channel_name, var/author, var/locked, var/adminChannel = 0) - var/datum/feed_channel/newChannel = new /datum/feed_channel +/datum/newscaster/feed_network/proc/CreateFeedChannel(channel_name, author, locked, adminChannel = 0) + var/datum/newscaster/feed_channel/newChannel = new /datum/newscaster/feed_channel newChannel.channel_name = channel_name newChannel.author = author newChannel.locked = locked newChannel.is_admin_channel = adminChannel network_channels += newChannel -/datum/feed_network/proc/SubmitArticle(var/msg, var/author, var/channel_name, var/obj/item/weapon/photo/photo, var/adminMessage = 0, var/allow_comments = 1) - var/datum/feed_message/newMsg = new /datum/feed_message +/datum/newscaster/feed_network/proc/SubmitArticle(msg, author, channel_name, obj/item/weapon/photo/photo, adminMessage = 0, allow_comments = 1) + var/datum/newscaster/feed_message/newMsg = new /datum/newscaster/feed_message newMsg.author = author newMsg.body = msg newMsg.time_stamp = "[worldtime2text()]" @@ -73,17 +126,37 @@ if(photo) newMsg.img = photo.img newMsg.caption = photo.scribble - for(var/datum/feed_channel/FC in network_channels) + for(var/datum/newscaster/feed_channel/FC in network_channels) if(FC.channel_name == channel_name) - FC.messages += newMsg //Adding message to the network's appropriate feed_channel + FC.messages += newMsg break for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) NEWSCASTER.newsAlert(channel_name) + lastAction ++ + newMsg.creationTime = lastAction +/datum/newscaster/feed_network/proc/submitWanted(criminal, body, scanned_user, obj/item/weapon/photo/photo, adminMsg = 0, newMessage = 0) + wanted_issue.active = 1 + wanted_issue.criminal = criminal + wanted_issue.body = body + wanted_issue.scannedUser = scanned_user + wanted_issue.isAdminMsg = adminMsg + if(photo) + wanted_issue.img = photo.img + if(newMessage) + for(var/obj/machinery/newscaster/N in allCasters) + N.newsAlert() + N.update_icon() -var/datum/feed_network/news_network = new /datum/feed_network //The global news-network, which is coincidentally a global list. +/datum/newscaster/feed_network/proc/deleteWanted() + wanted_issue.active = 0 + wanted_issue.criminal = null + wanted_issue.body = null + wanted_issue.scannedUser = null + wanted_issue.img = null + for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) + NEWSCASTER.update_icon() -var/list/obj/machinery/newscaster/allCasters = list() //Global list that will contain reference to all newscasters in existence. /obj/item/newscaster_frame @@ -117,8 +190,6 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co qdel(src) - - /obj/machinery/newscaster name = "newscaster" desc = "A standard Nanotrasen-licensed newsfeed handler for use in commercial space stations. All the news you absolutely have no use for, in one place!" @@ -127,60 +198,36 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co verb_say = "beeps" verb_ask = "beeps" verb_exclaim = "beeps" - var/isbroken = 0 //1 if someone banged it with something heavy - var/ispowered = 1 //starts powered, changes with power_change() - //var/list/datum/feed_channel/channel_list = list() //This list will contain the names of the feed channels. Each name will refer to a data region where the messages of the feed channels are stored. - //OBSOLETE: We're now using a global news network + var/isbroken = 0 + var/ispowered = 1 var/screen = 0 - // 0 = welcome screen - main menu - // 1 = view feed channels - // 2 = create feed channel - // 3 = create feed story - // 4 = feed story submited sucessfully - // 5 = feed channel created successfully - // 6 = ERROR: Cannot create feed story - // 7 = ERROR: Cannot create feed channel - // 8 = print newspaper - // 9 = viewing channel feeds - // 10 = censor feed story - // 11 = censor feed channel - //Holy shit this is outdated, made this when I was still starting newscasters :3 var/paper_remaining = 0 var/securityCaster = 0 - // 0 = Caster cannot be used to issue wanted posters - // 1 = the opposite - var/unit_no = 0 //Each newscaster has a unit number - //var/datum/feed_message/wanted //We're gonna use a feed_message to store data of the wanted person because fields are similar - //var/wanted_issue = 0 //OBSOLETE - // 0 = there's no WANTED issued, we don't need a special icon_state - // 1 = Guess what. + var/unit_no = 0 var/alert_delay = 500 var/alert = 0 - // 0 = there hasn't been a news/wanted update in the last alert_delay - // 1 = there has - var/scanned_user = "Unknown" //Will contain the name of the person who currently uses the newscaster - var/msg = ""; //Feed message + var/scanned_user = "Unknown" + var/msg = "" var/obj/item/weapon/photo/photo = null - var/channel_name = ""; //the feed channel which will be receiving the feed, or being created - var/c_locked=0; //Will our new channel be locked to public submissions? - var/hitstaken = 0 //Death at 3 hits from an item with force>=15 - var/datum/feed_channel/viewing_channel = null + var/channel_name = "" + var/c_locked=0 + var/hitstaken = 0 + var/datum/newscaster/feed_channel/viewing_channel = null var/allow_comments = 1 luminosity = 0 anchored = 1 - -/obj/machinery/newscaster/security_unit //Security unit +/obj/machinery/newscaster/security_unit name = "security newscaster" securityCaster = 1 /obj/machinery/newscaster/New() allCasters += src - src.paper_remaining = 15 + paper_remaining = 15 for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) - src.unit_no++ - src.update_icon() //for any custom ones on the map... - ..() //I just realised the newscasters weren't in the global machines list. The superconstructor call will tend to that + unit_no++ + update_icon() + ..() /obj/machinery/newscaster/Destroy() allCasters -= src @@ -191,76 +238,63 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co /obj/machinery/newscaster/update_icon() if(!ispowered || isbroken) icon_state = "newscaster_off" - if(isbroken) //If the thing is smashed, add crack overlay on top of the unpowered sprite. - src.overlays.Cut() - src.overlays += image(src.icon, "crack3") + if(isbroken) + overlays.Cut() + overlays += image(icon, "crack3") return - - src.overlays.Cut() //reset overlays - - if(news_network.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message + overlays.Cut() + if(news_network.wanted_issue.active) icon_state = "newscaster_wanted" return - - if(alert) //new message alert overlay - src.overlays += "newscaster_alert" - - if(hitstaken > 0) //Cosmetic damage overlay - src.overlays += image(src.icon, "crack[hitstaken]") - + if(alert) + overlays += "newscaster_alert" + if(hitstaken > 0) + overlays += image(icon, "crack[hitstaken]") icon_state = "newscaster_normal" - return /obj/machinery/newscaster/power_change() - if(isbroken) //Broken shit can't be powered. + if(isbroken) return - if( src.powered() ) - src.ispowered = 1 + if(powered()) + ispowered = 1 stat &= ~NOPOWER - src.update_icon() + update_icon() else spawn(rand(0, 15)) - src.ispowered = 0 + ispowered = 0 stat |= NOPOWER - src.update_icon() - + update_icon() /obj/machinery/newscaster/ex_act(severity, target) switch(severity) if(1.0) qdel(src) - return if(2.0) - src.isbroken=1 + isbroken=1 if(prob(50)) qdel(src) else - src.update_icon() //can't place it above the return and outside the if-else. or we might get runtimes of null.update_icon() if(prob(50)) goes in. - return + update_icon() else if(prob(50)) - src.isbroken=1 - src.update_icon() - return - return + isbroken=1 + update_icon() -/obj/machinery/newscaster/attack_ai(mob/user as mob) - return src.attack_hand(user) +/obj/machinery/newscaster/attack_ai(mob/user) + return attack_hand(user) -/obj/machinery/newscaster/attack_hand(mob/user as mob) //########### THE MAIN BEEF IS HERE! And in the proc below this...############ - if(!src.ispowered || src.isbroken) +/obj/machinery/newscaster/attack_hand(mob/user) + if(!ispowered || isbroken) return if(istype(user, /mob/living/carbon/human) || istype(user,/mob/living/silicon) ) var/mob/living/human_or_robot_user = user var/dat - - src.scan_user(human_or_robot_user) //Newscaster scans you - + scan_user(human_or_robot_user) switch(screen) if(0) - dat += "Welcome to Newscasting Unit #[src.unit_no].
Interface & News networks Operational." + dat += "Welcome to Newscasting Unit #[unit_no].
Interface & News networks Operational." dat += "
Property of Nanotransen Inc" - if(news_network.wanted_issue) + if(news_network.wanted_issue.active) dat+= "
Read Wanted Issue" dat+= "

Create Feed Channel" dat+= "
View Feed Channels" @@ -268,125 +302,113 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co dat+= "
Print newspaper" dat+= "
Re-scan User" dat+= "

Exit" - if(src.securityCaster) + if(securityCaster) var/wanted_already = 0 - if(news_network.wanted_issue) + if(news_network.wanted_issue.active) wanted_already = 1 - dat+="
Feed Security functions:
" dat+="
[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue" dat+="
Censor Feed Stories" dat+="
Mark Feed Channel with Nanotrasen D-Notice" - dat+="

The newscaster recognises you as: [src.scanned_user]" + dat+="

The newscaster recognises you as: [scanned_user]" if(1) dat+= "Station Feed Channels
" if( isemptylist(news_network.network_channels) ) dat+="No active channels found..." else - for(var/datum/feed_channel/CHANNEL in news_network.network_channels) + for(var/datum/newscaster/feed_channel/CHANNEL in news_network.network_channels) if(CHANNEL.is_admin_channel) dat+="[CHANNEL.channel_name]
" else dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
" - /*for(var/datum/feed_channel/CHANNEL in src.channel_list) - dat+="[CHANNEL.channel_name]:
\[created by: [CHANNEL.author]\]

" - if( isemptylist(CHANNEL.messages) ) - dat+="No feed messages found in channel...

" - else - for(var/datum/feed_message/MESSAGE in CHANNEL.messages) - dat+="-[MESSAGE.body]
\[Story by [MESSAGE.author]\]
"*/ - dat+="

Refresh" dat+="
Back" if(2) dat+="Creating new Feed Channel..." - dat+="
Channel Name: [src.channel_name]
" - dat+="Channel Author: [src.scanned_user]
" - dat+="Will Accept Public Feeds: [(src.c_locked) ? ("NO") : ("YES")]

" + dat+="
Channel Name: [channel_name]
" + dat+="Channel Author: [scanned_user]
" + dat+="Will Accept Public Feeds: [(c_locked) ? ("NO") : ("YES")]

" dat+="
Submit

Cancel
" if(3) dat+="Creating new Feed Message..." - dat+="
Receiving Channel: [src.channel_name]
" //MARK - dat+="Message Author: [src.scanned_user]
" - dat+="Message Body:
[parsepencode(src.msg, user, SIGNFONT)]
" - dat+="Attach Photo: [(src.photo ? "Photo Attached" : "No Photo")]
" + dat+="
Receiving Channel: [channel_name]
" + dat+="Message Author: [scanned_user]
" + dat+="Message Body:
[parsepencode(msg, user, SIGNFONT)]
" + dat+="Attach Photo: [(photo ? "Photo Attached" : "No Photo")]
" dat+="Comments [allow_comments ? "Enabled" : "Disabled"]
" dat+="
Submit

Cancel
" if(4) - dat+="Feed story successfully submitted to [src.channel_name].

" + dat+="Feed story successfully submitted to [channel_name].

" dat+="
Return
" if(5) - dat+="Feed Channel [src.channel_name] created successfully.

" + dat+="Feed Channel [channel_name] created successfully.

" dat+="
Return
" if(6) dat+="ERROR: Could not submit Feed story to Network.

" - if(src.channel_name=="") + if(channel_name=="") dat+="•Invalid receiving channel name.
" - if(src.scanned_user=="Unknown") + if(scanned_user=="Unknown") dat+="•Channel author unverified.
" - if(src.msg == "" || src.msg == "\[REDACTED\]") + if(msg == "" || msg == "\[REDACTED\]") dat+="•Invalid message body.
" - dat+="
Return
" if(7) dat+="ERROR: Could not submit Feed Channel to Network.

" - //var/list/existing_channels = list() //Let's get dem existing channels - OBSOLETE var/list/existing_authors = list() - for(var/datum/feed_channel/FC in news_network.network_channels) - //existing_channels += FC.channel_name //OBSOLETE - if(FC.author == "\[REDACTED\]") - existing_authors += FC.backup_author + for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) + if(FC.authorCensor) + existing_authors += news_network.redactedText else existing_authors += FC.author - if(src.scanned_user in existing_authors) + if(scanned_user in existing_authors) dat+="•There already exists a Feed channel under your name.
" - if(src.channel_name=="" || src.channel_name == "\[REDACTED\]") + if(channel_name=="" || channel_name == "\[REDACTED\]") dat+="•Invalid channel name.
" var/check = 0 - for(var/datum/feed_channel/FC in news_network.network_channels) - if(FC.channel_name == src.channel_name) + for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) + if(FC.channel_name == channel_name) check = 1 break if(check) dat+="•Channel name already in use.
" - if(src.scanned_user=="Unknown") + if(scanned_user=="Unknown") dat+="•Channel author unverified.
" dat+="
Return
" if(8) var/total_num=length(news_network.network_channels) var/active_num=total_num var/message_num=0 - for(var/datum/feed_channel/FC in news_network.network_channels) + for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) if(!FC.censored) - message_num += length(FC.messages) //Dont forget, datum/feed_channel's var messages is a list of datum/feed_message + message_num += length(FC.messages) else active_num-- - dat+="Network currently serves a total of [total_num] Feed channels, [active_num] of which are active, and a total of [message_num] Feed Stories." //TODO: CONTINUE - dat+="

Liquid Paper remaining: [(src.paper_remaining) *100 ] cm^3" + dat+="Network currently serves a total of [total_num] Feed channels, [active_num] of which are active, and a total of [message_num] Feed Stories." + dat+="

Liquid Paper remaining: [(paper_remaining) *100 ] cm^3" dat+="

Print Paper" dat+="
Cancel" if(9) - dat+="[src.viewing_channel.channel_name]: \[created by: [src.viewing_channel.author]\]
" - if(src.viewing_channel.censored) + dat+="[viewing_channel.channel_name]: \[created by: [viewing_channel.returnAuthor(-1)]\]
" + if(viewing_channel.censored) dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
" dat+="No further feed story additions are allowed while the D-Notice is in effect.

" else - if( isemptylist(src.viewing_channel.messages) ) + if( isemptylist(viewing_channel.messages) ) dat+="No feed messages found in channel...
" else var/i = 0 - for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages) + for(var/datum/newscaster/feed_message/MESSAGE in viewing_channel.messages) i++ - dat+="-[MESSAGE.body]
" + dat+="-[MESSAGE.returnBody(-1)]
" if(MESSAGE.img) usr << browse_rsc(MESSAGE.img, "tmp_photo[i].png") dat+="
" if(MESSAGE.caption) dat+="[MESSAGE.caption]
" dat+="
" - dat+="\[Story by [MESSAGE.author] \] - ([MESSAGE.time_stamp])
" + dat+="\[Story by [MESSAGE.returnAuthor(-1)] \] - ([MESSAGE.time_stamp])
" dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]
" - for(var/datum/feed_comment/comment in MESSAGE.comments) + for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments) dat+="[comment.body]
[comment.author] [comment.time_stamp]
" if(MESSAGE.locked) dat+="Comments locked
" @@ -402,7 +424,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co if(isemptylist(news_network.network_channels)) dat+="No feed channels found active...
" else - for(var/datum/feed_channel/CHANNEL in news_network.network_channels) + for(var/datum/newscaster/feed_channel/CHANNEL in news_network.network_channels) dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
" dat+="
Cancel" if(11) @@ -413,80 +435,75 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co if(isemptylist(news_network.network_channels)) dat+="No feed channels found active...
" else - for(var/datum/feed_channel/CHANNEL in news_network.network_channels) + for(var/datum/newscaster/feed_channel/CHANNEL in news_network.network_channels) dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
" - dat+="
Back" if(12) - dat+="[src.viewing_channel.channel_name]: \[ created by: [src.viewing_channel.author] \]
" - dat+="[(src.viewing_channel.author=="\[REDACTED\]") ? ("Undo Author censorship") : ("Censor channel Author")]
" - - - if( isemptylist(src.viewing_channel.messages) ) + dat+="[viewing_channel.channel_name]: \[ created by: [viewing_channel.returnAuthor(-1)] \]
" + dat+="[(viewing_channel.authorCensor) ? ("Undo Author censorship") : ("Censor channel Author")]
" + if(isemptylist(viewing_channel.messages)) dat+="No feed messages found in channel...
" else - for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages) - dat+="-[MESSAGE.body]
\[Story by [MESSAGE.author]\]
" - dat+="[(MESSAGE.body == "\[REDACTED\]") ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.author == "\[REDACTED\]") ? ("Undo Author Censorship") : ("Censor message Author")]
" + for(var/datum/newscaster/feed_message/MESSAGE in viewing_channel.messages) + dat+="-[MESSAGE.returnBody(-1)]
\[Story by [MESSAGE.returnAuthor(-1)]\]
" + dat+="[(MESSAGE.bodyCensor) ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.authorCensor) ? ("Undo Author Censorship") : ("Censor message Author")]
" dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]: [MESSAGE.locked ? "Unlock" : "Lock"]
" - for(var/datum/feed_comment/comment in MESSAGE.comments) + for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments) dat+="[comment.body] X
[comment.author] [comment.time_stamp]
" dat+="
Back" if(13) - dat+="[src.viewing_channel.channel_name]: \[ created by: [src.viewing_channel.author] \]
" - dat+="Channel messages listed below. If you deem them dangerous to the station, you can Bestow a D-Notice upon the channel.
" - if(src.viewing_channel.censored) + dat+="[viewing_channel.channel_name]: \[ created by: [viewing_channel.returnAuthor(-1)] \]
" + dat+="Channel messages listed below. If you deem them dangerous to the station, you can Bestow a D-Notice upon the channel.
" + if(viewing_channel.censored) dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
" dat+="No further feed story additions are allowed while the D-Notice is in effect.

" else - if( isemptylist(src.viewing_channel.messages) ) + if(isemptylist(viewing_channel.messages)) dat+="No feed messages found in channel...
" else - for(var/datum/feed_message/MESSAGE in src.viewing_channel.messages) - dat+="-[MESSAGE.body]
\[Story by [MESSAGE.author]\]
" - + for(var/datum/newscaster/feed_message/MESSAGE in viewing_channel.messages) + dat+="-[MESSAGE.returnBody(-1)]
\[Story by [MESSAGE.returnAuthor(-1)]\]
" dat+="
Back" if(14) dat+="Wanted Issue Handler:" var/wanted_already = 0 var/end_param = 1 - if(news_network.wanted_issue) + if(news_network.wanted_issue.active) wanted_already = 1 end_param = 2 - if(wanted_already) dat+="
A wanted issue is already in Feed Circulation. You can edit or cancel it below.
" dat+="
" - dat+="Criminal Name: [src.channel_name]
" - dat+="Description: [src.msg]
" - dat+="Attach Photo: [(src.photo ? "Photo Attached" : "No Photo")]
" + dat+="Criminal Name: [channel_name]
" + dat+="Description: [msg]
" + dat+="Attach Photo: [(photo ? "Photo Attached" : "No Photo")]
" if(wanted_already) - dat+="Wanted Issue created by: [news_network.wanted_issue.backup_author]
" + dat+="Wanted Issue created by: [news_network.wanted_issue.scannedUser]
" else - dat+="Wanted Issue will be created under prosecutor: [src.scanned_user]
" + dat+="Wanted Issue will be created under prosecutor: [scanned_user]
" dat+="
[(wanted_already) ? ("Edit Issue") : ("Submit")]" if(wanted_already) dat+="
Take down Issue" dat+="
Cancel" if(15) - dat+="Wanted issue for [src.channel_name] is now in Network Circulation.

" + dat+="Wanted issue for [channel_name] is now in Network Circulation.

" dat+="
Return
" if(16) dat+="ERROR: Wanted Issue rejected by Network.

" - if(src.channel_name=="" || src.channel_name == "\[REDACTED\]") + if(channel_name=="" || channel_name == "\[REDACTED\]") dat+="•Invalid name for person wanted.
" - if(src.scanned_user=="Unknown") + if(scanned_user=="Unknown") dat+="•Issue author unverified.
" - if(src.msg == "" || src.msg == "\[REDACTED\]") + if(msg == "" || msg == "\[REDACTED\]") dat+="•Invalid description.
" dat+="
Return
" if(17) dat+="Wanted Issue successfully deleted from Circulation
" dat+="
Return
" if(18) - if(news_network.wanted_issue) - dat+="-- STATIONWIDE WANTED ISSUE --
\[Submitted by: [news_network.wanted_issue.backup_author]\]
" - dat+="Criminal: [news_network.wanted_issue.author]
" + if(news_network.wanted_issue.active) + dat+="-- STATIONWIDE WANTED ISSUE --
\[Submitted by: [news_network.wanted_issue.scannedUser]\]
" + dat+="Criminal: [news_network.wanted_issue.criminal]
" dat+="Description: [news_network.wanted_issue.body]
" dat+="Photo:: " if(news_network.wanted_issue.img) @@ -498,7 +515,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co dat+="No current wanted issue found.

" dat+="

Back
" if(19) - dat+="Wanted issue for [src.channel_name] successfully edited.

" + dat+="Wanted issue for [channel_name] successfully edited.

" dat+="
Return
" if(20) dat+="Printing successful. Please receive your newspaper from the bottom of the machine.

" @@ -506,338 +523,264 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co if(21) dat+="Unable to print newspaper. Insufficient paper. Please notify maintenance personnel to refill machine storage.

" dat+="Return" - else - dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com" - - //human_or_robot_user << browse(dat, "window=newscaster_main;size=400x600") - //onclose(human_or_robot_user, "newscaster_main") - - var/datum/browser/popup = new(human_or_robot_user, "newscaster_main", "Newscaster Unit #[src.unit_no]", 400, 600) + var/datum/browser/popup = new(human_or_robot_user, "newscaster_main", "Newscaster Unit #[unit_no]", 400, 600) popup.set_content(dat) - popup.set_title_image(human_or_robot_user.browse_rsc_icon(src.icon, src.icon_state)) + popup.set_title_image(human_or_robot_user.browse_rsc_icon(icon, icon_state)) popup.open() /obj/machinery/newscaster/Topic(href, href_list) if(..()) return - if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) + if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) scan_user(usr) if(href_list["set_channel_name"]) - src.channel_name = stripped_input(usr, "Provide a Feed Channel Name", "Network Channel Handler", "", MAX_NAME_LEN) - while (findtext(src.channel_name," ") == 1) - src.channel_name = copytext(src.channel_name,2,lentext(src.channel_name)+1) - src.updateUsrDialog() - //src.update_icon() - + channel_name = stripped_input(usr, "Provide a Feed Channel Name", "Network Channel Handler", "", MAX_NAME_LEN) + while (findtext(channel_name," ") == 1) + channel_name = copytext(channel_name,2,lentext(channel_name)+1) + updateUsrDialog() else if(href_list["set_channel_lock"]) - src.c_locked = !src.c_locked - src.updateUsrDialog() - //src.update_icon() - + c_locked = !c_locked + updateUsrDialog() else if(href_list["submit_new_channel"]) var/list/existing_authors = list() - for(var/datum/feed_channel/FC in news_network.network_channels) - //existing_channels += FC.channel_name - if(FC.author == "\[REDACTED\]") - existing_authors += FC.backup_author + for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) + if(FC.authorCensor) + existing_authors += news_network.redactedText else - existing_authors +=FC.author + existing_authors += FC.author var/check = 0 - for(var/datum/feed_channel/FC in news_network.network_channels) - if(FC.channel_name == src.channel_name) + for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) + if(FC.channel_name == channel_name) check = 1 break - if(src.channel_name == "" || src.channel_name == "\[REDACTED\]" || src.scanned_user == "Unknown" || check || (src.scanned_user in existing_authors) ) - src.screen=7 + if(channel_name == "" || channel_name == "\[REDACTED\]" || scanned_user == "Unknown" || check || (scanned_user in existing_authors) ) + screen=7 else var/choice = alert("Please confirm Feed channel creation","Network Channel Handler","Confirm","Cancel") if(choice=="Confirm") scan_user(usr) - news_network.CreateFeedChannel(src.channel_name, src.scanned_user, c_locked) + news_network.CreateFeedChannel(channel_name, scanned_user, c_locked) feedback_inc("newscaster_channels",1) - src.screen=5 - src.updateUsrDialog() - //src.update_icon() - + screen=5 + updateUsrDialog() else if(href_list["set_channel_receiving"]) - //var/list/datum/feed_channel/available_channels = list() var/list/available_channels = list() - for(var/datum/feed_channel/F in news_network.network_channels) + for(var/datum/newscaster/feed_channel/F in news_network.network_channels) if( (!F.locked || F.author == scanned_user) && !F.censored) available_channels += F.channel_name - src.channel_name = input(usr, "Choose receiving Feed Channel", "Network Channel Handler") in available_channels - src.updateUsrDialog() - + channel_name = input(usr, "Choose receiving Feed Channel", "Network Channel Handler") in available_channels + updateUsrDialog() else if(href_list["set_new_message"]) - var/temp_message = trim(stripped_multiline_input(usr, "Write your Feed story", "Network Channel Handler", src.msg)) + var/temp_message = trim(stripped_multiline_input(usr, "Write your Feed story", "Network Channel Handler", msg)) if(temp_message) - src.msg = temp_message - src.updateUsrDialog() - + msg = temp_message + updateUsrDialog() else if(href_list["set_attachment"]) AttachPhoto(usr) - src.updateUsrDialog() - + updateUsrDialog() else if(href_list["submit_new_message"]) - if(src.msg =="" || src.msg=="\[REDACTED\]" || src.scanned_user == "Unknown" || src.channel_name == "" ) - src.screen=6 + if(msg =="" || msg=="\[REDACTED\]" || scanned_user == "Unknown" || channel_name == "" ) + screen=6 else - news_network.SubmitArticle("[parsepencode(src.msg, usr, SIGNFONT)]", scanned_user, channel_name, photo, allow_comments) + news_network.SubmitArticle("[parsepencode(msg, usr, SIGNFONT)]", scanned_user, channel_name, photo, 0, allow_comments) feedback_inc("newscaster_stories",1) - src.screen=4 - src.msg = "" - src.updateUsrDialog() - + screen=4 + msg = "" + updateUsrDialog() else if(href_list["create_channel"]) - src.screen=2 - src.updateUsrDialog() - + screen=2 + updateUsrDialog() else if(href_list["create_feed_story"]) - src.screen=3 - src.updateUsrDialog() - + screen=3 + updateUsrDialog() else if(href_list["menu_paper"]) - src.screen=8 - src.updateUsrDialog() + screen=8 + updateUsrDialog() else if(href_list["print_paper"]) - if(!src.paper_remaining) - src.screen=21 + if(!paper_remaining) + screen=21 else - src.print_paper() - src.screen = 20 - src.updateUsrDialog() - + print_paper() + screen = 20 + updateUsrDialog() else if(href_list["menu_censor_story"]) - src.screen=10 - src.updateUsrDialog() - + screen=10 + updateUsrDialog() else if(href_list["menu_censor_channel"]) - src.screen=11 - src.updateUsrDialog() - + screen=11 + updateUsrDialog() else if(href_list["menu_wanted"]) var/already_wanted = 0 - if(news_network.wanted_issue) + if(news_network.wanted_issue.active) already_wanted = 1 - if(already_wanted) - src.channel_name = news_network.wanted_issue.author - src.msg = news_network.wanted_issue.body - src.screen = 14 - src.updateUsrDialog() - + channel_name = news_network.wanted_issue.criminal + msg = news_network.wanted_issue.body + screen = 14 + updateUsrDialog() else if(href_list["set_wanted_name"]) - src.channel_name = trim(stripped_input(usr, "Provide the name of the Wanted person", "Network Security Handler")) - src.updateUsrDialog() - + channel_name = trim(stripped_input(usr, "Provide the name of the Wanted person", "Network Security Handler")) + updateUsrDialog() else if(href_list["set_wanted_desc"]) - src.msg = trim(stripped_input(usr, "Provide the a description of the Wanted person and any other details you deem important", "Network Security Handler")) - src.updateUsrDialog() - + msg = trim(stripped_input(usr, "Provide the a description of the Wanted person and any other details you deem important", "Network Security Handler")) + updateUsrDialog() else if(href_list["submit_wanted"]) var/input_param = text2num(href_list["submit_wanted"]) - if(src.msg == "" || src.channel_name == "" || src.scanned_user == "Unknown") - src.screen = 16 + if(msg == "" || channel_name == "" || scanned_user == "Unknown") + screen = 16 else var/choice = alert("Please confirm Wanted Issue [(input_param==1) ? ("creation.") : ("edit.")]","Network Security Handler","Confirm","Cancel") if(choice=="Confirm") scan_user(usr) - if(input_param==1) //If input_param == 1 we're submitting a new wanted issue. At 2 we're just editing an existing one. See the else below - var/datum/feed_message/WANTED = new /datum/feed_message - WANTED.author = src.channel_name - WANTED.body = src.msg - WANTED.backup_author = src.scanned_user //I know, a bit wacky - if(photo) - WANTED.img = photo.img - news_network.wanted_issue = WANTED - for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) - NEWSCASTER.newsAlert() - NEWSCASTER.update_icon() - src.screen = 15 + if(input_param==1) //If input_param == 1 we're submitting a new wanted issue. At 2 we're just editing an existing one. + news_network.submitWanted(channel_name, msg, scanned_user, photo, 0 , 1) + screen = 15 else - if(news_network.wanted_issue.is_admin_message) + if(news_network.wanted_issue.isAdminMsg) alert("The wanted issue has been distributed by a Nanotrasen higherup. You cannot edit it.","Ok") return - news_network.wanted_issue.author = src.channel_name - news_network.wanted_issue.body = src.msg - news_network.wanted_issue.backup_author = src.scanned_user - if(photo) - news_network.wanted_issue.img = photo.img - src.screen = 19 - - src.updateUsrDialog() - + news_network.submitWanted(channel_name, msg, scanned_user, photo) + screen = 19 + updateUsrDialog() else if(href_list["cancel_wanted"]) - if(news_network.wanted_issue.is_admin_message) + if(news_network.wanted_issue.isAdminMsg) alert("The wanted issue has been distributed by a Nanotrasen higherup. You cannot take it down.","Ok") return var/choice = alert("Please confirm Wanted Issue removal","Network Security Handler","Confirm","Cancel") if(choice=="Confirm") - news_network.wanted_issue = null - for(var/obj/machinery/newscaster/NEWSCASTER in allCasters) - NEWSCASTER.update_icon() - src.screen=17 - src.updateUsrDialog() - + news_network.deleteWanted() + screen=17 + updateUsrDialog() else if(href_list["view_wanted"]) - src.screen=18 - src.updateUsrDialog() + screen=18 + updateUsrDialog() else if(href_list["censor_channel_author"]) - var/datum/feed_channel/FC = locate(href_list["censor_channel_author"]) + var/datum/newscaster/feed_channel/FC = locate(href_list["censor_channel_author"]) if(FC.is_admin_channel) alert("This channel was created by a Nanotrasen Officer. You cannot censor it.","Ok") return - if(FC.author != "\[REDACTED\]") - FC.backup_author = FC.author - FC.author = "\[REDACTED\]" - else - FC.author = FC.backup_author - src.updateUsrDialog() - + FC.toggleCensorAuthor() + updateUsrDialog() else if(href_list["censor_channel_story_author"]) - var/datum/feed_message/MSG = locate(href_list["censor_channel_story_author"]) + var/datum/newscaster/feed_message/MSG = locate(href_list["censor_channel_story_author"]) if(MSG.is_admin_message) alert("This message was created by a Nanotrasen Officer. You cannot censor its author.","Ok") return - if(MSG.author != "\[REDACTED\]") - MSG.backup_author = MSG.author - MSG.author = "\[REDACTED\]" - else - MSG.author = MSG.backup_author - src.updateUsrDialog() - + MSG.toggleCensorAuthor() + updateUsrDialog() else if(href_list["censor_channel_story_body"]) - var/datum/feed_message/MSG = locate(href_list["censor_channel_story_body"]) + var/datum/newscaster/feed_message/MSG = locate(href_list["censor_channel_story_body"]) if(MSG.is_admin_message) alert("This channel was created by a Nanotrasen Officer. You cannot censor it.","Ok") return - if(MSG.body != "\[REDACTED\]") - MSG.backup_body = MSG.body - MSG.body = "\[REDACTED\]" - else - MSG.body = MSG.backup_body - src.updateUsrDialog() - + MSG.toggleCensorBody() + updateUsrDialog() else if(href_list["pick_d_notice"]) - var/datum/feed_channel/FC = locate(href_list["pick_d_notice"]) - src.viewing_channel = FC - src.screen=13 - src.updateUsrDialog() - + var/datum/newscaster/feed_channel/FC = locate(href_list["pick_d_notice"]) + viewing_channel = FC + screen=13 + updateUsrDialog() else if(href_list["toggle_d_notice"]) - var/datum/feed_channel/FC = locate(href_list["toggle_d_notice"]) + var/datum/newscaster/feed_channel/FC = locate(href_list["toggle_d_notice"]) if(FC.is_admin_channel) alert("This channel was created by a Nanotrasen Officer. You cannot place a D-Notice upon it.","Ok") return - FC.censored = !FC.censored - src.updateUsrDialog() - + FC.toggleCensorDclass() + updateUsrDialog() else if(href_list["view"]) - src.screen=1 - src.updateUsrDialog() - - else if(href_list["setScreen"]) //Brings us to the main menu and resets all fields~ - src.screen = text2num(href_list["setScreen"]) - if (src.screen == 0) - src.scanned_user = "Unknown"; + screen=1 + updateUsrDialog() + else if(href_list["setScreen"]) + screen = text2num(href_list["setScreen"]) + if (screen == 0) + scanned_user = "Unknown"; msg = ""; - src.c_locked=0; + c_locked=0; channel_name=""; - src.viewing_channel = null - src.updateUsrDialog() - + viewing_channel = null + updateUsrDialog() else if(href_list["show_channel"]) - var/datum/feed_channel/FC = locate(href_list["show_channel"]) - src.viewing_channel = FC - src.screen = 9 - src.updateUsrDialog() - + var/datum/newscaster/feed_channel/FC = locate(href_list["show_channel"]) + viewing_channel = FC + screen = 9 + updateUsrDialog() else if(href_list["pick_censor_channel"]) - var/datum/feed_channel/FC = locate(href_list["pick_censor_channel"]) - src.viewing_channel = FC - src.screen = 12 - src.updateUsrDialog() - + var/datum/newscaster/feed_channel/FC = locate(href_list["pick_censor_channel"]) + viewing_channel = FC + screen = 12 + updateUsrDialog() else if(href_list["new_comment"]) - var/datum/feed_message/FM = locate(href_list["new_comment"]) + var/datum/newscaster/feed_message/FM = locate(href_list["new_comment"]) var/cominput = copytext(stripped_input(usr, "Write your message:", "New comment", null),1,141) if(cominput) scan_user(usr) - var/datum/feed_comment/FC = new/datum/feed_comment + var/datum/newscaster/feed_comment/FC = new/datum/newscaster/feed_comment FC.author = scanned_user FC.body = cominput FC.time_stamp = worldtime2text() FM.comments += FC - log_comment("[usr]/([usr.ckey]) as [scanned_user] commented on message [FM.body] -- [FC.body]") + log_comment("[usr]/([usr.ckey]) as [scanned_user] commented on message [FM.returnBody(-1)] -- [FC.body]") updateUsrDialog() - else if(href_list["del_comment"]) - var/datum/feed_comment/FC = locate(href_list["del_comment"]) - var/datum/feed_message/FM = locate(href_list["del_comment_msg"]) + var/datum/newscaster/feed_comment/FC = locate(href_list["del_comment"]) + var/datum/newscaster/feed_message/FM = locate(href_list["del_comment_msg"]) FM.comments -= FC qdel(FC) updateUsrDialog() - else if(href_list["lock_comment"]) - var/datum/feed_message/FM = locate(href_list["lock_comment"]) + var/datum/newscaster/feed_message/FM = locate(href_list["lock_comment"]) FM.locked ^= 1 updateUsrDialog() - else if(href_list["set_comment"]) allow_comments ^= 1 updateUsrDialog() - else if(href_list["refresh"]) - src.updateUsrDialog() - - -/obj/machinery/newscaster/attackby(obj/item/I as obj, mob/living/user as mob, params) + updateUsrDialog() +/obj/machinery/newscaster/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/weapon/wrench)) user << "You start [anchored ? "un" : ""]securing [name]..." - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 60)) user << "You [anchored ? "un" : ""]secure [name]." new /obj/item/newscaster_frame(loc) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) qdel(src) return - - if (isbroken) - playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1) - audible_message("[user.name] further abuses the shattered [src.name].", null, 5 ) + if(isbroken) + playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1) + audible_message("[user.name] further abuses the shattered [name].", null, 5 ) else - if(istype(I, /obj/item/weapon) ) + if(istype(I, /obj/item/weapon)) user.do_attack_animation(src) var/obj/item/weapon/W = I if(W.damtype == STAMINA) return if(W.force <15) - audible_message("[user.name] hits the [src.name] with the [W.name] with no visible effect.", null , 5 ) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1) + audible_message("[user.name] hits the [name] with the [W.name] with no visible effect.", null , 5 ) + playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) else hitstaken++ if(hitstaken==3) - audible_message("[user.name] smashes the [src.name]!", null, 5 ) + audible_message("[user.name] smashes the [name]!", null, 5 ) isbroken=1 - playsound(src.loc, 'sound/effects/Glassbr3.ogg', 100, 1) + playsound(loc, 'sound/effects/Glassbr3.ogg', 100, 1) else - audible_message("[user.name] forcefully slams the [src.name] with the [I.name]!", null, 5 ) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1) + audible_message("[user.name] forcefully slams the [name] with the [I.name]!", null, 5 ) + playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1) else user << "This does nothing!" - src.update_icon() + update_icon() - -/obj/machinery/newscaster/attack_paw(mob/user as mob) +/obj/machinery/newscaster/attack_paw(mob/user) user << "The newscaster controls are far too complicated for your tiny brain!" return -/obj/machinery/newscaster/proc/AttachPhoto(mob/user as mob) +/obj/machinery/newscaster/proc/AttachPhoto(mob/user) if(photo) if(!photo.sillynewscastervar) - photo.loc = src.loc + photo.loc = loc if(!issilicon(user)) user.put_in_inactive_hand(photo) else @@ -852,7 +795,6 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co var/find var/datum/picture/selection var/obj/item/device/camera/siliconcam/targetcam = null - if(istype(user,/mob/living/silicon/ai)) var/mob/living/silicon/ai/R = user targetcam = R.aicamera @@ -863,8 +805,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co else targetcam = R.aicamera else - user << "You cannot interface with silicon photo uploading!" //gtfo pAIs - + user << "You cannot interface with silicon photo uploading!" if(targetcam.aipictures.len == 0) usr << "No images saved" return @@ -881,210 +822,210 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co photo = P qdel(P) +/obj/machinery/newscaster/proc/scan_user(mob/living/user) + if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + if(human_user.wear_id) + if(istype(human_user.wear_id, /obj/item/device/pda)) + var/obj/item/device/pda/P = human_user.wear_id + if(P.id) + scanned_user = "[P.id.registered_name] ([P.id.assignment])" + else + scanned_user = "Unknown" + else if(istype(human_user.wear_id, /obj/item/weapon/card/id) ) + var/obj/item/weapon/card/id/ID = human_user.wear_id + scanned_user ="[ID.registered_name] ([ID.assignment])" + else + scanned_user ="Unknown" + else + scanned_user ="Unknown" + else if(istype(user,/mob/living/silicon)) + var/mob/living/silicon/ai_user = user + scanned_user = "[ai_user.name] ([ai_user.job])" + else + ERROR("Newscaster used by non-human/silicon mob: [user.type]") + +/obj/machinery/newscaster/proc/print_paper() + feedback_inc("newscaster_newspapers_printed",1) + var/obj/item/weapon/newspaper/NEWSPAPER = new /obj/item/weapon/newspaper + for(var/datum/newscaster/feed_channel/FC in news_network.network_channels) + NEWSPAPER.news_content += FC + if(news_network.wanted_issue.active) + NEWSPAPER.wantedAuthor = news_network.wanted_issue.scannedUser + NEWSPAPER.wantedCriminal = news_network.wanted_issue.criminal + NEWSPAPER.wantedBody = news_network.wanted_issue.body + if(news_network.wanted_issue.img) + NEWSPAPER.wantedPhoto = news_network.wanted_issue.img + NEWSPAPER.loc = get_turf(src) + NEWSPAPER.creationTime = news_network.lastAction + paper_remaining-- + +/obj/machinery/newscaster/proc/newsAlert(channel) + if(channel) + say("Breaking news from [channel]!") + alert ++ + update_icon() + spawn(alert_delay) + alert -- + update_icon() + playsound(loc, 'sound/machines/twobeep.ogg', 75, 1) + else + say("Attention! Wanted issue distributed!") + playsound(loc, 'sound/machines/warning-buzzer.ogg', 75, 1) -//######################################################################################################################## -//###################################### NEWSPAPER! ###################################################################### -//######################################################################################################################## /obj/item/weapon/newspaper name = "newspaper" desc = "An issue of The Griffon, the newspaper circulating aboard Nanotrasen Space Stations." icon = 'icons/obj/bureaucracy.dmi' icon_state = "newspaper" - w_class = 2 //Let's make it fit in trashbags! + w_class = 2 attack_verb = list("bapped") var/screen = 0 var/pages = 0 var/curr_page = 0 - var/list/datum/feed_channel/news_content = list() - var/datum/feed_message/important_message = null + var/list/datum/newscaster/feed_channel/news_content = list() var/scribble="" var/scribble_page = null + var/wantedAuthor + var/wantedCriminal + var/wantedBody + var/wantedPhoto + var/creationTime -/*obj/item/weapon/newspaper/attack_hand(mob/user as mob) - ..() - world << "derp"*/ - -obj/item/weapon/newspaper/attack_self(mob/user as mob) +/obj/item/weapon/newspaper/attack_self(mob/user) if(ishuman(user)) var/mob/living/carbon/human/human_user = user var/dat - src.pages = 0 + pages = 0 switch(screen) if(0) //Cover dat+="
The Griffon
" dat+="
Nanotrasen-standard newspaper, for use on Nanotrasen© Space Facilities

" - if(isemptylist(src.news_content)) - if(src.important_message) - dat+="Contents:
" + if(isemptylist(news_content)) + if(wantedAuthor) + dat+="Contents:
" else dat+="Other than the title, the rest of the newspaper is unprinted..." else dat+="Contents:
" if(scribble_page==curr_page) - dat+="
There is a small scribble near the end of this page... It reads: \"[src.scribble]\"" + dat+="
There is a small scribble near the end of this page... It reads: \"[scribble]\"" dat+= "
Next Page
Done reading
" if(1) // X channel pages inbetween. - for(var/datum/feed_channel/NP in src.news_content) - src.pages++ //Let's get it right again. - var/datum/feed_channel/C = src.news_content[src.curr_page] - dat+="[C.channel_name] \[created by: [C.author]\]

" - if(C.censored) + for(var/datum/newscaster/feed_channel/NP in news_content) + pages++ + var/datum/newscaster/feed_channel/C = news_content[curr_page] + dat += "[C.channel_name] \[created by: [C.returnAuthor(notContent(C.authorCensorTime))]\]

" + if(notContent(C.DclassCensorTime)) dat+="This channel was deemed dangerous to the general welfare of the station and therefore marked with a D-Notice. Its contents were not transferred to the newspaper at the time of printing." else if(isemptylist(C.messages)) dat+="No Feed stories stem from this channel..." else - dat+="