diff --git a/code/game/cellautomata.dm b/code/game/cellautomata.dm index 4210d0c6d08..5e776224594 100644 --- a/code/game/cellautomata.dm +++ b/code/game/cellautomata.dm @@ -82,6 +82,7 @@ src.load_admins() if (config.usewhitelist) load_whitelist() + LoadBansjob() src.update_status() makepowernets() diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 1d6ed945278..5839df7e98b 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -238,6 +238,112 @@ var/showadminmessages = 1 //del(M) if("Cancel") return + if (href_list["newjobban1"]) + var/mob/M = locate(href_list["newjobban1"]) + var/dat = "" + var/header = "Pick Job to ban this guy from.
" + var/body +// var/list/alljobs = get_all_jobs() + var/jobs = "" + jobs += "Heads
" + jobs += "Security
" + jobs += "Engineering
" + jobs += "Research
" + jobs += "Medical

" + + jobs += "CE+Station Engineer
" + jobs += "CE+Atmospheric Tech
" + jobs += "CE+Shaft Miner
" + jobs += "Chemist+RD+CMO
" + jobs += "Geneticist+RD+CMO
" + jobs += "MD+CMO
" + jobs += "Virologist+RD+CMO
" + jobs += "Scientist+RD
" + jobs += "AI+Cyborg
" + jobs += "Detective+HoS

" + for(var/job in uniquelist(occupations + assistant_occupations)) + if(job == "Tourist") + continue + if(jobban_isbanned(M, job)) + jobs += "[dd_replacetext(job, " ", " ")] " + else + jobs += "[dd_replacetext(job, " ", " ")] " //why doesn't this work the stupid cunt + + if(jobban_isbanned(M, "Captain")) + jobs += "Captain " + else + jobs += "Captain " //why doesn't this work the stupid cunt + if(jobban_isbanned(M, "Syndicate")) + jobs += "
[dd_replacetext("Syndicate", " ", " ")] " + else + jobs += "
[dd_replacetext("Syndicate", " ", " ")] " //why doesn't this work the stupid cunt + + body = "
[jobs]

" + dat = "[header][body]" + usr << browse(dat, "window=jobban2;size=600x250") + return + if(href_list["newjobban2"]) + if ((src.rank in list("Moderator", "Administrator", "Badmin", "Tyrant" ))) + var/mob/M = locate(href_list["jobban4"]) + var/job = href_list["newjobban2"] + if(!ismob(M)) 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 + switch(alert("Temporary Ban?",,"Yes","No", "Cancel")) + if("Yes") + var/mins = input(usr,"How long (in days)?","Ban time",7) as num + mins = mins * 24 * 60 + if(!mins) + return + if(mins >= 525600) mins = 525599 + var/reason = input(usr,"Reason?","reason","Griefer") as text + if(!reason) + return + if(AddBanjob(M.ckey, M.computer_id, reason, usr.ckey, 1, mins, job)) + M << "\redYou have been jobbanned from [job] by [usr.client.ckey].\nReason: [reason]." + M << "\red This is a temporary ban, it will be removed in [mins] minutes." + if(config.banappeals) + M << "\red To try to resolve this matter head to [config.banappeals]" + else + M << "\red No ban appeals URL has been set." + log_admin("[usr.client.ckey] has banned [M.ckey] from [job].\nReason: [reason]\nThis will be removed in [mins] minutes.") + message_admins("\blue[usr.client.ckey] has banned [M.ckey] from [job].\nReason: [reason]\nThis will be removed in [mins] minutes.") + + //del(M.client) + //del(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends. + if("No") + var/reason = input(usr,"Reason?","reason","Griefer") as text + if(!reason) + return + if(AddBanjob(M.ckey, M.computer_id, reason, usr.ckey, 0, 0, job)) + M << "\redYou have been banned from [job] by [usr.client.ckey].\nReason: [reason]." + M << "\red This is a permanent ban." + if(config.banappeals) + M << "\red To try to resolve this matter head to [config.banappeals]" + else + M << "\red No ban appeals URL has been set." + log_admin("[usr.client.ckey] has banned [M.ckey] from [job].\nReason: [reason]\nThis is a permanent ban.") + message_admins("\blue[usr.client.ckey] has banned [M.ckey] from [job].\nReason: [reason]\nThis is a permanent ban.") + + //del(M.client) + //del(M) + if("Cancel") + return + + if(href_list["unjobbanf"]) + var/banfolder = href_list["unjobbanf"] + Banlist.cd = "/base/[banfolder]" + var/key = Banlist["key"] + if(alert(usr, "Are you sure you want to unban [key]?", "Confirmation", "Yes", "No") == "Yes") + if (RemoveBanjob(banfolder)) + unjobbanpanel() + else + alert(usr,"This ban has already been lifted / does not exist.","Error","Ok") + unjobbanpanel() + + if(href_list["unjobbane"]) + return /* if (href_list["remove"]) if ((src.rank in list( "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" ))) @@ -2170,6 +2276,12 @@ var/showadminmessages = 1 onclose(usr,"server_logfile") return +/client/proc/unjobban_panel() + set name = "Unjobban Panel" + set category = "Admin" + if (src.holder) + src.holder.unjobbanpanel() + return // diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index c4c8d9b3f42..faf631b2539 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -167,7 +167,7 @@ verbs += /client/proc/spawn_xeno //N verbs += /proc/possess verbs += /proc/release - + verbs += /client/proc/unjobban_panel // verbs += /obj/admins/proc/togglegoonsay // verbs += /client/proc/grillify // verbs += /client/proc/cmd_admin_list_admins @@ -439,7 +439,7 @@ verbs += /client/proc/spawn_xeno //N verbs += /proc/possess verbs += /proc/release - + verbs += /client/proc/unjobban_panel // Old and unused // verbs += /obj/admins/proc/togglegoonsay // verbs += /client/proc/grillify @@ -751,7 +751,7 @@ //verbs += /client/proc/spawn_xeno //N //verbs += /proc/possess //verbs += /proc/release - + verbs += /client/proc/unjobban_panel // Old and unused // verbs += /obj/admins/proc/togglegoonsay // verbs += /client/proc/grillify @@ -1027,7 +1027,7 @@ //verbs += /client/proc/spawn_xeno //N //verbs += /proc/possess //verbs += /proc/release - + verbs += /client/proc/unjobban_panel // Old and unused // verbs += /obj/admins/proc/togglegoonsay // verbs += /client/proc/grillify @@ -1131,6 +1131,7 @@ verbs -= /client/proc/sec_camera_report verbs -= /client/proc/intercom_view + // Admin helpers verbs -= /client/proc/cmd_admin_attack_log verbs -= /client/proc/cmd_admin_check_contents @@ -1204,7 +1205,7 @@ verbs -= /client/proc/spawn_xeno //N verbs -= /proc/possess verbs -= /proc/release - + verbs -= /client/proc/unjobban_panel // verbs -= /obj/admins/proc/togglegoonsay // verbs -= /client/proc/grillify // verbs -= /client/proc/cmd_admin_list_admins diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index 5d89ac2fb1d..45c59385666 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -8,6 +8,7 @@ var jobban_savebanfile() /proc/jobban_isbanned(mob/M, rank) + if(_jobban_isbanned(M, rank)) return 1//for old jobban if(M) if (is_important_job(rank)) if(config.guest_jobban && IsGuestKey(M.key)) diff --git a/code/modules/admin/newbanjob.dm b/code/modules/admin/newbanjob.dm new file mode 100644 index 00000000000..cd30de3fd05 --- /dev/null +++ b/code/modules/admin/newbanjob.dm @@ -0,0 +1,273 @@ +var/savefile/Banlistjob + + +/proc/_jobban_isbanned(var/client/clientvar, var/rank) + if(!clientvar) return 1 + ClearTempbansjob() + var/id = clientvar.computer_id + var/key = clientvar.ckey + if (is_important_job(rank)) + if(config.guest_jobban && IsGuestKey(key)) + return 1 + Banlistjob.cd = "/base" + if (Banlistjob.dir.Find("[key][id][rank]")) + return 1 + + Banlistjob.cd = "/base" + for (var/A in Banlistjob.dir) + Banlistjob.cd = "/base/[A]" + if ((id == Banlistjob["id"] || key == Banlistjob["key"]) && rank == Banlistjob["rank"]) + return 1 + return 0 + + +///proc/UpdateTime() //No idea why i made this a proc. +// CMinutes = (world.realtime / 10) / 60 +// return 1 + +/proc/LoadBansjob() + + Banlistjob = new("data/job_fullnew.bdb") + log_admin("Loading Banlistjob") + + if (!length(Banlistjob.dir)) log_admin("Banlistjob is empty.") + + if (!Banlistjob.dir.Find("base")) + log_admin("Banlistjob missing base dir.") + Banlistjob.dir.Add("base") + Banlistjob.cd = "/base" + else if (Banlistjob.dir.Find("base")) + Banlistjob.cd = "/base" + + ClearTempbansjob() + return 1 + +/proc/ClearTempbansjob() + UpdateTime() + + Banlistjob.cd = "/base" + for (var/A in Banlistjob.dir) + Banlistjob.cd = "/base/[A]" + //if (!Banlistjob["key"] || !Banlistjob["id"]) + // RemoveBanjob(A, "full") + // log_admin("Invalid Ban.") + // message_admins("Invalid Ban.") + // continue + + if (!Banlistjob["temp"]) continue + if (CMinutes >= Banlistjob["minutes"]) RemoveBanjob(A) + + return 1 + + +/proc/AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, rank) + UpdateTime() + var/bantimestamp + if (temp) + UpdateTime() + bantimestamp = CMinutes + minutes + if(rank == "Heads") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Personnel") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Captain") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Security") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer") + return 1 + if(rank == "Security") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Security") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Warden") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Detective") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Security Officer") + return 1 + if(rank == "Engineering") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Station Engineer") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Atmospheric Technician") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer") + return 1 + if(rank == "Research") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Scientist") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Geneticist") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director") + return 1 + if(rank == "Medical") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Geneticist") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Medical Doctor") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chemist") + return 1 + if(rank == "CE_Station_Engineer") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Station Engineer") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer") + return 1 + if(rank == "CE_Atmospheric_Tech") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Atmospheric Technician") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer") + return 1 + if(rank == "CE_Shaft_Miner") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Shaft Miner") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Engineer") + return 1 + if(rank == "Chemist_RD_CMO") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chemist") + return 1 + if(rank == "Geneticist_RD_CMO") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Geneticist") + return 1 + if(rank == "MD_CMO") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Medical Doctor") + return 1 + if(rank == "Scientist_RD") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Scientist") + return 1 + if(rank == "AI_Cyborg") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Cyborg") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "AI") + return 1 + if(rank == "Detective_HoS") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Detective") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Head of Security") + return 1 + if(rank == "Virologist_RD_CMO") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Chief Medical Officer") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Research Director") + AddBanjob(ckey, computerid, reason, bannedby, temp, minutes, "Virologist") + return 1 + + Banlistjob.cd = "/base" + if ( Banlistjob.dir.Find("[ckey][computerid][rank]") ) + usr << text("\red Banjob already exists.") + return 0 + else + Banlistjob.dir.Add("[ckey][computerid][rank]") + Banlistjob.cd = "/base/[ckey][computerid][rank]" + Banlistjob["key"] << ckey + Banlistjob["id"] << computerid + Banlistjob["rank"] << rank + Banlistjob["reason"] << reason + Banlistjob["bannedby"] << bannedby + Banlistjob["temp"] << temp + if (temp) + Banlistjob["minutes"] << bantimestamp + + return 1 + +/proc/RemoveBanjob(foldername) + var/key + var/id + var/rank + Banlistjob.cd = "/base/[foldername]" + Banlistjob["key"] >> key + Banlistjob["id"] >> id + Banlistjob["rank"] >> rank + Banlistjob.cd = "/base" + + if (!Banlistjob.dir.Remove(foldername)) return 0 + + if(!usr) + log_admin("Banjob Expired: [key]") + message_admins("Banjob Expired: [key]") + else + log_admin("[key_name_admin(usr)] unjobbanned [key] from [rank]") + message_admins("[key_name_admin(usr)] unjobbanned:[key] from [rank]") + + for (var/A in Banlistjob.dir) + Banlistjob.cd = "/base/[A]" + if ((key == Banlistjob["key"] || id == Banlistjob["id"]) && (rank == Banlistjob["rank"])) + Banlistjob.cd = "/base" + Banlistjob.dir.Remove(A) + continue + + return 1 + +/proc/GetExpjob(minutes as num) + UpdateTime() + var/exp = minutes - CMinutes + if (exp <= 0) + return 0 + else + var/timeleftstring + if (exp >= 1440) //1440 = 1 day in minutes + timeleftstring = "[round(exp / 1440, 0.1)] Days" + else if (exp >= 60) //60 = 1 hour in minutes + timeleftstring = "[round(exp / 60, 0.1)] Hours" + else + timeleftstring = "[exp] Minutes" + return timeleftstring + +/obj/admins/proc/unjobbanpanel() + var/count = 0 + var/dat + //var/dat = "
Unban Player: \blue(U) = Unban , (E) = Edit Ban\green (Total
" + Banlistjob.cd = "/base" + for (var/A in Banlistjob.dir) + count++ + Banlistjob.cd = "/base/[A]" + dat += text("") + + dat += "
(U) Key: [Banlistjob["key"]] Rank: [Banlistjob["rank"]] ([Banlistjob["temp"] ? "[GetExpjob(Banlistjob["minutes"]) ? GetExpjob(Banlistjob["minutes"]) : "Removal pending" ]" : "Permaban"])(By: [Banlistjob["bannedby"]])(Reason: [Banlistjob["reason"]])
" + dat = "
Bans: (U) = Unban , - ([count] Bans)
[dat]" + usr << browse(dat, "window=unbanp;size=875x400") + +/*/obj/admins/proc/permjobban(ckey, computerid, reason, bannedby, temp, minutes, rank) + if(AddBanjob(ckey, computerid, reason, usr.ckey, 0, 0, job)) + M << "\redYou have been banned from [job] by [usr.client.ckey].\nReason: [reason]." + M << "\red This is a permanent ban." + if(config.banappeals) + M << "\red To try to resolve this matter head to [config.banappeals]" + else + M << "\red No ban appeals URL has been set." + log_admin("[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis is a permanent ban.") + message_admins("\blue[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis is a permanent ban.") +/obj/admins/proc/timejobban(ckey, computerid, reason, bannedby, temp, minutes, rank) + if(AddBanjob(ckey, computerid, reason, usr.ckey, 1, mins, job)) + M << "\redYou have been jobbanned from [job] by [usr.client.ckey].\nReason: [reason]." + M << "\red This is a temporary ban, it will be removed in [mins] minutes." + if(config.banappeals) + M << "\red To try to resolve this matter head to [config.banappeals]" + else + M << "\red No ban appeals URL has been set." + log_admin("[usr.client.ckey] has jobbanned from [job] [ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.") + message_admins("\blue[usr.client.ckey] has banned from [job] [ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")*/ +//////////////////////////////////// DEBUG //////////////////////////////////// + +/proc/CreateBansjob() + + UpdateTime() + + var/i + var/last + + for(i=0, i<1001, i++) + var/a = pick(1,0) + var/b = pick(1,0) + if(b) + Banlistjob.cd = "/base" + Banlistjob.dir.Add("trash[i]trashid[i]") + Banlistjob.cd = "/base/trash[i]trashid[i]" + Banlistjob["key"] << "trash[i]" + else + Banlistjob.cd = "/base" + Banlistjob.dir.Add("[last]trashid[i]") + Banlistjob.cd = "/base/[last]trashid[i]" + Banlistjob["key"] << last + Banlistjob["id"] << "trashid[i]" + Banlistjob["reason"] << "Trashban[i]." + Banlistjob["temp"] << a + Banlistjob["minutes"] << CMinutes + rand(1,2000) + Banlistjob["bannedby"] << "trashmin" + last = "trash[i]" + + Banlistjob.cd = "/base" + +/proc/ClearAllBansjob() + Banlistjob.cd = "/base" + for (var/A in Banlistjob.dir) + RemoveBanjob(A, "full") diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 4406ae000c1..7056e73fc6c 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -326,6 +326,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that else alert("Invalid mob") + /client/proc/cmd_admin_dress(var/mob/living/carbon/human/M in world) set category = "Fun" set name = "Select equipment" @@ -414,4 +415,4 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that mopbucket.reagents.add_reagent("water", 100) M.update_clothing() - return \ No newline at end of file + return diff --git a/tgstation.dme b/tgstation.dme index eae9c08920f..8ec42e5e5d8 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -626,6 +626,7 @@ #include "code\modules\admin\create_mob.dm" #include "code\modules\admin\create_object.dm" #include "code\modules\admin\create_turf.dm" +#include "code\modules\admin\newbanjob.dm" #include "code\modules\admin\verbs\adminhelp.dm" #include "code\modules\admin\verbs\adminjump.dm" #include "code\modules\admin\verbs\adminsay.dm"