diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 46502b1e550..e9f25656a1f 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -232,7 +232,7 @@ var/global/datum/controller/occupations/job_master H.mind.assigned_role = rank H.mind.role_alt_title = null - if(!joined_late && rank != "Tourist") + if(!joined_late) var/obj/S = null for(var/obj/effect/landmark/start/sloc in world) if(sloc.name != rank) continue diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 5bcfd466285..912ddd89a93 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -196,82 +196,370 @@ var/global/BSACooldown = 0 if(href_list["jobban2"]) var/mob/M = locate(href_list["jobban2"]) - var/dat = "" - var/header = "Pick Job to ban this guy from.
" - var/body - var/jobs = "" + if(!M) //sanity + alert("Mob no longer exists!") + return + if(!M.ckey) //sanity + alert("Mob has no ckey") + return if(!job_master) usr << "Job Master has not been setup!" return - for(var/datum/job/job in job_master.occupations) - if(job.title == "Tourist") - continue + var/dat = "" + var/header = "Job-Ban Panel: [M.name]" + var/body + var/jobs = "" + + /***********************************WARNING!************************************ + The jobban stuff looks mangled and disgusting + But it looks beautiful in-game + -Nodrak + ************************************WARNING!***********************************/ + var/counter = 0 +//Regular jobs + //Command (Blue) + jobs += "" + jobs += "" + for(var/jobPos in command_positions) + if(!jobPos) continue + var/datum/job/job = job_master.GetJob(jobPos) + if(!job) continue + if(jobban_isbanned(M, job.title)) - jobs += "[dd_replacetext(job.title, " ", " ")] " + jobs += "" + counter++ else - jobs += "[dd_replacetext(job.title, " ", " ")] " + jobs += "" + counter++ -/* if(jobban_isbanned(M, "Captain")) These two are now jobs in the datums and should show up in the above code - jobs += "Captain " - else - jobs += "Captain " + if(counter >= 6) //So things dont get squiiiiished! + jobs += "" + counter = 0 + jobs += "
Command Positions
[dd_replacetext(job.title, " ", " ")][dd_replacetext(job.title, " ", " ")]
" - if(jobban_isbanned(M, "AI")) - jobs += "AI " - else - jobs += "AI " -*/ - if(jobban_isbanned(M, "Syndicate")) - jobs += "
[dd_replacetext("Syndicate", " ", " ")] " - else - jobs += "
[dd_replacetext("Syndicate", " ", " ")] " + //Security (Red) + counter = 0 + jobs += "" + jobs += "" + for(var/jobPos in security_positions) + if(!jobPos) continue + var/datum/job/job = job_master.GetJob(jobPos) + if(!job) continue - if(jobban_isbanned(M, "Emergency Response Team")) - jobs += "
[dd_replacetext("Emergency Response Team", " ", " ")] " - else - jobs += "
[dd_replacetext("Emergency Response Team", " ", " ")] " + if(jobban_isbanned(M, job.title)) + jobs += "" + counter++ + else + jobs += "" + counter++ + if(counter >= 5) //So things dont get squiiiiished! + jobs += "" + counter = 0 + jobs += "
Security Positions
[dd_replacetext(job.title, " ", " ")][dd_replacetext(job.title, " ", " ")]
" + //Engineering (Yellow) + counter = 0 + jobs += "" + jobs += "" + for(var/jobPos in engineering_positions) + if(!jobPos) continue + var/datum/job/job = job_master.GetJob(jobPos) + if(!job) continue + + if(jobban_isbanned(M, job.title)) + jobs += "" + counter++ + else + jobs += "" + counter++ + + if(counter >= 5) //So things dont get squiiiiished! + jobs += "" + counter = 0 + jobs += "
Engineering Positions
[dd_replacetext(job.title, " ", " ")][dd_replacetext(job.title, " ", " ")]
" + + //Medical (White) + counter = 0 + jobs += "" + jobs += "" + for(var/jobPos in medical_positions) + if(!jobPos) continue + var/datum/job/job = job_master.GetJob(jobPos) + if(!job) continue + + if(jobban_isbanned(M, job.title)) + jobs += "" + counter++ + else + jobs += "" + counter++ + + if(counter >= 5) //So things dont get squiiiiished! + jobs += "" + counter = 0 + jobs += "
Medical Positions
[dd_replacetext(job.title, " ", " ")][dd_replacetext(job.title, " ", " ")]
" + + //Science (Purple) + counter = 0 + jobs += "" + jobs += "" + for(var/jobPos in science_positions) + if(!jobPos) continue + var/datum/job/job = job_master.GetJob(jobPos) + if(!job) continue + + if(jobban_isbanned(M, job.title)) + jobs += "" + counter++ + else + jobs += "" + counter++ + + if(counter >= 5) //So things dont get squiiiiished! + jobs += "" + counter = 0 + jobs += "
Science Positions
[dd_replacetext(job.title, " ", " ")][dd_replacetext(job.title, " ", " ")]
" + + //Civilian (Grey) + counter = 0 + jobs += "" + jobs += "" + for(var/jobPos in civilian_positions) + if(!jobPos) continue + var/datum/job/job = job_master.GetJob(jobPos) + if(!job) continue + + if(jobban_isbanned(M, job.title)) + jobs += "" + counter++ + else + jobs += "" + counter++ + + if(counter >= 5) //So things dont get squiiiiished! + jobs += "" + counter = 0 + jobs += "
Civilian Positions
[dd_replacetext(job.title, " ", " ")][dd_replacetext(job.title, " ", " ")]
" + + //Non-Human (Green) + counter = 0 + jobs += "" + jobs += "" + for(var/jobPos in nonhuman_positions) + if(!jobPos) continue + var/datum/job/job = job_master.GetJob(jobPos) + if(!job) continue + + if(jobban_isbanned(M, job.title)) + jobs += "" + counter++ + else + jobs += "" + counter++ + + if(counter >= 5) //So things dont get squiiiiished! + jobs += "" + counter = 0 + + //pAI isn't technically a job, but it goes in here. if(jobban_isbanned(M, "pAI")) - jobs += "
pAI " + jobs += "" else - jobs += "
pAI " + jobs += "" - body = "
[jobs]

" + jobs += "
Non-human Positions
[dd_replacetext(job.title, " ", " ")][dd_replacetext(job.title, " ", " ")]
pAIpAI
" + + //Antagonist (Orange) + var/isbanned_dept = jobban_isbanned(M, "Syndicate") + jobs += "" + jobs += "" + + //Traitor + if(jobban_isbanned(M, "traitor") || isbanned_dept) + jobs += "" + else + jobs += "" + + //Changeling + if(jobban_isbanned(M, "changeling") || isbanned_dept) + jobs += "" + else + jobs += "" + + //Nuke Operative + if(jobban_isbanned(M, "operative") || isbanned_dept) + jobs += "" + else + jobs += "" + + //Revolutionary + if(jobban_isbanned(M, "revolutionary") || isbanned_dept) + jobs += "" + else + jobs += "" + + jobs += "" //Breaking it up so it fits nicer on the screen every 5 entries + + //Cultist + if(jobban_isbanned(M, "cultist") || isbanned_dept) + jobs += "" + else + jobs += "" + + //Wizard + if(jobban_isbanned(M, "wizard") || isbanned_dept) + jobs += "" + else + jobs += "" + + //Emergency Response Team + if(jobban_isbanned(M, "Emergency Response Team" || isbanned_dept)) + jobs += "" + else + jobs += "" + + +/* //Malfunctioning AI //Removed Malf-bans because they're a pain to impliment + if(jobban_isbanned(M, "malf AI") || isbanned_dept) + jobs += "" + else + jobs += "" + + //Alien + if(jobban_isbanned(M, "alien candidate") || isbanned_dept) + jobs += "" + else + jobs += "" + + //Infested Monkey + if(jobban_isbanned(M, "infested monkey") || isbanned_dept) + jobs += "" + else + jobs += "" +*/ + jobs += "
Antagonist Positions
[dd_replacetext("Traitor", " ", " ")][dd_replacetext("Traitor", " ", " ")][dd_replacetext("Changeling", " ", " ")][dd_replacetext("Changeling", " ", " ")][dd_replacetext("Nuke Operative", " ", " ")][dd_replacetext("Nuke Operative", " ", " ")][dd_replacetext("Revolutionary", " ", " ")][dd_replacetext("Revolutionary", " ", " ")]
[dd_replacetext("Cultist", " ", " ")][dd_replacetext("Cultist", " ", " ")][dd_replacetext("Wizard", " ", " ")][dd_replacetext("Wizard", " ", " ")][dd_replacetext("Emergency Response Team", " ", " ")][dd_replacetext("Emergency Response Team", " ", " ")][dd_replacetext("Malf AI", " ", " ")][dd_replacetext("Malf AI", " ", " ")][dd_replacetext("Alien", " ", " ")][dd_replacetext("Alien", " ", " ")][dd_replacetext("Infested Monkey", " ", " ")][dd_replacetext("Infested Monkey", " ", " ")]
" + + body = "[jobs]" dat = "[header][body]" - usr << browse(dat, "window=jobban2;size=600x180") + usr << browse(dat, "window=jobban2;size=800x450") return + //JOBBAN'S INNARDS if(href_list["jobban3"]) if (src.rank in list( "Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" )) var/mob/M = locate(href_list["jobban4"]) - var/job = href_list["jobban3"] + if(!M) + alert("Mob no longer exists!") + return if ((M.client && M.client.holder && (M.client.holder.level > src.level))) alert("You cannot perform this action. You must be of a higher administrative rank!") return - if (jobban_isbanned(M, job)) - log_admin("[key_name(usr)] unbanned [key_name(M)] from [job]") - ban_unban_log_save("[key_name(usr)] unjobbanned [key_name(M)] from [job]") - M << "\redYou have been un-jobbanned by [usr.client.ckey] from [job]." - //feedback_inc("ban_job_unban",1) - message_admins("\blue [key_name_admin(usr)] unbanned [key_name_admin(M)] from [job]", 1) - jobban_unban(M, job) - href_list["jobban2"] = 1 - else - var/reason = input(usr,"Reason?","reason","griefer") as text|null - if(!reason) - return - ban_unban_log_save("[key_name(usr)] jobbanned [key_name(M)] from [job]. reason: [reason]") - log_admin("[key_name(usr)] banned [key_name(M)] from [job]") - //feedback_inc("ban_job",1) - M << "\redYou have been jobbanned by [usr.client.ckey] from [job]." - M << "\red The reason is: [reason]" - M << "\red Jobban can be lifted only on demand." - message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [job]", 1) - jobban_fullban(M, job, reason) - href_list["jobban2"] = 1 // lets it fall through and refresh - if(config.appeal_address) - M << "\red You may try to appeal this at [config.appeal_address]" + if(!job_master) + usr << "Job Master has not been setup!" + return + + //get jobs for department if specified, otherwise just returnt he one job in a list. + var/list/joblist = list() + switch(href_list["jobban3"]) + if("commanddept") + for(var/jobPos in command_positions) + if(!jobPos) continue + var/datum/job/temp = job_master.GetJob(jobPos) + if(!temp) continue + joblist += temp.title + if("securitydept") + for(var/jobPos in security_positions) + if(!jobPos) continue + var/datum/job/temp = job_master.GetJob(jobPos) + if(!temp) continue + joblist += temp.title + if("engineeringdept") + for(var/jobPos in engineering_positions) + if(!jobPos) continue + var/datum/job/temp = job_master.GetJob(jobPos) + if(!temp) continue + joblist += temp.title + if("medicaldept") + for(var/jobPos in medical_positions) + if(!jobPos) continue + var/datum/job/temp = job_master.GetJob(jobPos) + if(!temp) continue + joblist += temp.title + if("sciencedept") + for(var/jobPos in science_positions) + if(!jobPos) continue + var/datum/job/temp = job_master.GetJob(jobPos) + if(!temp) continue + joblist += temp.title + if("civiliandept") + for(var/jobPos in civilian_positions) + if(!jobPos) continue + var/datum/job/temp = job_master.GetJob(jobPos) + if(!temp) continue + joblist += temp.title + if("nonhumandept") + joblist += "pAI" + for(var/jobPos in nonhuman_positions) + if(!jobPos) continue + var/datum/job/temp = job_master.GetJob(jobPos) + if(!temp) continue + joblist += temp.title + else + joblist += href_list["jobban3"] + + //Create a list of unbanned jobs within joblist + var/list/notbannedlist = list() + for(var/job in joblist) + if(!jobban_isbanned(M, job)) + notbannedlist += job + + //Banning comes first + if(notbannedlist.len) //at least 1 unbanned job exists in joblist so we have stuff to ban. + var/reason = input(usr,"Reason?","Please State Reason","") as text|null + if(reason) + var/msg + for(var/job in notbannedlist) + ban_unban_log_save("[key_name(usr)] jobbanned [key_name(M)] from [job]. reason: [reason]") + log_admin("[key_name(usr)] banned [key_name(M)] from [job]") + feedback_inc("ban_job",1) + feedback_add_details("ban_job","- [job]") + jobban_fullban(M, job, "[reason]; By [usr.ckey] on [time2text(world.realtime)]") + if(!msg) msg = job + else msg += ", [job]" + message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [msg]", 1) + M << "\redYou have been jobbanned by [usr.client.ckey] from: [msg]." + M << "\red The reason is: [reason]" + M << "\red Jobban can be lifted only upon request." + if(config.appeal_address) + M << "\red You may try to appeal this at [config.appeal_address]" + href_list["jobban2"] = 1 // lets it fall through and refresh + return 1 + + //Unbanning joblist + //all jobs in joblist are banned already OR we didn't give a reason (implying they shouldn't be banned) + if(joblist.len) //at least 1 banned job exists in joblist so we have stuff to unban. + var/msg + for(var/job in joblist) + var/reason = jobban_isbanned(M, job) + if(!reason) continue //skip if it isn't jobbanned anyway + switch(alert("Job: '[job]' Reason: '[reason]' Un-jobban?","Please Confirm","Yes","No")) + if("Yes") + ban_unban_log_save("[key_name(usr)] unjobbanned [key_name(M)] from [job]") + log_admin("[key_name(usr)] unbanned [key_name(M)] from [job]") + feedback_inc("ban_job_unban",1) + feedback_add_details("ban_job_unban","- [job]") + jobban_unban(M, job) + if(!msg) msg = job + else msg += ", [job]" + else + continue + if(msg) + message_admins("\blue [key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg]", 1) + M << "\redYou have been un-jobbanned by [usr.client.ckey] from [msg]." + href_list["jobban2"] = 1 // lets it fall through and refresh + return 1 + return 0 //we didn't do anything! if (href_list["boot2"]) if ((src.rank in list( "Moderator", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" ))) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 6e0908137be..78883f7ebd0 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -2,9 +2,10 @@ canmove = 0 src.loc = paicard card = paicard - if(!card.radio) - card.radio = new /obj/item/device/radio(src.card) - radio = card.radio + if(card) + if(!card.radio) + card.radio = new /obj/item/device/radio(src.card) + radio = card.radio ..()