mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-03 14:02:49 +00:00
All full blanket antagonist bans are now classes as Antagonist, instead of Syndicate bans, as Syndicate refers to a specific subset of antags. This made global banning someone from all roles impossible.
131 lines
3.7 KiB
Plaintext
131 lines
3.7 KiB
Plaintext
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
|
|
|
|
var/jobban_runonce // Updates legacy bans with new info
|
|
var/jobban_keylist[0] //to store the keys & ranks
|
|
|
|
/proc/jobban_fullban(mob/M, rank, reason)
|
|
if (!M || !M.key) return
|
|
jobban_keylist.Add(text("[M.ckey] - [rank] ## [reason]"))
|
|
jobban_savebanfile()
|
|
|
|
/proc/jobban_client_fullban(ckey, rank)
|
|
if (!ckey || !rank) return
|
|
jobban_keylist.Add(text("[ckey] - [rank]"))
|
|
jobban_savebanfile()
|
|
|
|
//returns a reason if M is banned from rank, returns 0 otherwise
|
|
/proc/jobban_isbanned(mob/M, rank)
|
|
if(M && rank)
|
|
/*
|
|
if(_jobban_isbanned(M, rank)) return "Reason Unspecified" //for old jobban
|
|
*/
|
|
|
|
if (guest_jobbans(rank))
|
|
if(config.guest_jobban && IsGuestKey(M.key))
|
|
return "Guest Job-ban"
|
|
if(config.usewhitelist && !check_whitelist(M))
|
|
return "Whitelisted Job"
|
|
|
|
var/static/list/antag_bantypes
|
|
|
|
if (isnull(antag_bantypes))
|
|
antag_bantypes = list()
|
|
for (var/antag_type in all_antag_types)
|
|
var/datum/antagonist/antag = all_antag_types[antag_type]
|
|
if (antag && antag.bantype)
|
|
antag_bantypes |= "[antag.bantype]"
|
|
|
|
// We manage antagonist bans at this end point.
|
|
// Alternative is to manage it at each call to jobban_isbanned, however,
|
|
// there is no actual reason why you should be able to play an antag if you're banned from all of them.
|
|
var/antag_ban = FALSE
|
|
if (rank in antag_bantypes)
|
|
antag_ban = TRUE
|
|
|
|
for (var/s in jobban_keylist)
|
|
if(findtext(s,"[M.ckey] - [rank]") == 1 || (antag_ban && findtext(s, "[M.ckey] - Antagonist") == 1))
|
|
var/startpos = findtext(s, "## ")+3
|
|
if(startpos && startpos<length(s))
|
|
var/text = copytext(s, startpos, 0)
|
|
if(text)
|
|
return text
|
|
return "Reason Unspecified"
|
|
return 0
|
|
|
|
/*
|
|
DEBUG
|
|
/mob/verb/list_all_jobbans()
|
|
set name = "list all jobbans"
|
|
|
|
for(var/s in jobban_keylist)
|
|
world << s
|
|
|
|
/mob/verb/reload_jobbans()
|
|
set name = "reload jobbans"
|
|
|
|
jobban_loadbanfile()
|
|
*/
|
|
|
|
/hook/startup/proc/loadJobBans()
|
|
jobban_loadbanfile()
|
|
return 1
|
|
|
|
/proc/jobban_loadbanfile()
|
|
if(config.ban_legacy_system)
|
|
var/savefile/S=new("data/job_full.ban")
|
|
S["keys[0]"] >> jobban_keylist
|
|
log_admin("Loading jobban_rank")
|
|
S["runonce"] >> jobban_runonce
|
|
|
|
if (!length(jobban_keylist))
|
|
jobban_keylist=list()
|
|
log_admin("jobban_keylist was empty")
|
|
else
|
|
if(!establish_db_connection(dbcon))
|
|
error("Database connection failed. Reverting to the legacy ban system.")
|
|
log_misc("Database connection failed. Reverting to the legacy ban system.")
|
|
config.ban_legacy_system = 1
|
|
jobban_loadbanfile()
|
|
return
|
|
|
|
//Job permabans
|
|
var/DBQuery/query = dbcon.NewQuery("SELECT ckey, job FROM ss13_ban WHERE bantype = 'JOB_PERMABAN' AND isnull(unbanned)")
|
|
query.Execute()
|
|
|
|
while(query.NextRow())
|
|
var/ckey = query.item[1]
|
|
var/job = query.item[2]
|
|
|
|
jobban_keylist.Add("[ckey] - [job]")
|
|
|
|
//Job tempbans
|
|
var/DBQuery/query1 = dbcon.NewQuery("SELECT ckey, job FROM ss13_ban WHERE bantype = 'JOB_TEMPBAN' AND isnull(unbanned) AND expiration_time > Now()")
|
|
query1.Execute()
|
|
|
|
while(query1.NextRow())
|
|
var/ckey = query1.item[1]
|
|
var/job = query1.item[2]
|
|
|
|
jobban_keylist.Add("[ckey] - [job]")
|
|
|
|
/proc/jobban_savebanfile()
|
|
var/savefile/S=new("data/job_full.ban")
|
|
S["keys[0]"] << jobban_keylist
|
|
|
|
/proc/jobban_unban(mob/M, rank)
|
|
jobban_remove("[M.ckey] - [rank]")
|
|
jobban_savebanfile()
|
|
|
|
|
|
/proc/ban_unban_log_save(var/formatted_log)
|
|
text2file(formatted_log,"data/ban_unban_log.txt")
|
|
|
|
|
|
/proc/jobban_remove(X)
|
|
for (var/i = 1; i <= length(jobban_keylist); i++)
|
|
if( findtext(jobban_keylist[i], "[X]") )
|
|
jobban_keylist.Remove(jobban_keylist[i])
|
|
jobban_savebanfile()
|
|
return 1
|
|
return 0
|