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+="