mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-20 15:21:29 +00:00
143 lines
4.2 KiB
Plaintext
143 lines
4.2 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] // Linear list of jobban strings, kept around for the legacy system
|
|
var/jobban_assoclist[0] // Associative list, for efficiency
|
|
|
|
// Matches string-based jobbans into ckey, rank, and reason groups
|
|
var/regex/jobban_regex = regex("(\[\\S]+) - (\[^#]+\[^# ])(?: ## (.+))?")
|
|
|
|
/proc/jobban_assoc_insert(ckey, rank, reason)
|
|
if(!ckey || !rank)
|
|
return
|
|
if(!jobban_assoclist[ckey])
|
|
jobban_assoclist[ckey] = list()
|
|
jobban_assoclist[ckey][rank] = reason || "Reason Unspecified"
|
|
|
|
/proc/jobban_fullban(mob/M, rank, reason)
|
|
if(!M || !M.key)
|
|
return
|
|
jobban_keylist.Add(text("[M.ckey] - [rank] ## [reason]"))
|
|
jobban_assoc_insert(M.ckey, rank, reason)
|
|
if(config.ban_legacy_system)
|
|
jobban_savebanfile()
|
|
|
|
/proc/jobban_client_fullban(ckey, rank)
|
|
if(!ckey || !rank)
|
|
return
|
|
jobban_keylist.Add(text("[ckey] - [rank]"))
|
|
jobban_assoc_insert(ckey, rank)
|
|
if(config.ban_legacy_system)
|
|
jobban_savebanfile()
|
|
|
|
//returns a reason if M is banned from rank, returns 0 otherwise
|
|
/proc/jobban_isbanned(mob/M, rank)
|
|
if(!M || !rank)
|
|
return 0
|
|
|
|
if(config.guest_jobban && guest_jobbans(rank))
|
|
if(IsGuestKey(M.key))
|
|
return "Guest Job-ban"
|
|
|
|
if(jobban_assoclist[M.ckey])
|
|
return jobban_assoclist[M.ckey][rank]
|
|
else
|
|
return 0
|
|
|
|
/*
|
|
DEBUG
|
|
/mob/verb/list_all_jobbans()
|
|
set name = "list all jobbans"
|
|
|
|
for(var/s in jobban_keylist)
|
|
to_chat(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")
|
|
|
|
for(var/s in jobban_keylist)
|
|
if(jobban_regex.Find(s))
|
|
jobban_assoc_insert(jobban_regex.group[1], jobban_regex.group[2], jobban_regex.group[3])
|
|
else
|
|
log_debug("Skipping malformed job ban: [s]")
|
|
else
|
|
if(!establish_db_connection())
|
|
log_to_dd("Database connection failed. Reverting to the legacy ban system.")
|
|
diary << "Database connection failed. Reverting to the legacy ban system."
|
|
config.ban_legacy_system = 1
|
|
jobban_loadbanfile()
|
|
return
|
|
|
|
//Job permabans
|
|
var/DBQuery/permabans = dbcon.NewQuery("SELECT ckey, job FROM [format_table_name("ban")] WHERE bantype = 'JOB_PERMABAN' AND isnull(unbanned)")
|
|
permabans.Execute()
|
|
// Job tempbans
|
|
var/DBQuery/tempbans = dbcon.NewQuery("SELECT ckey, job FROM [format_table_name("ban")] WHERE bantype = 'JOB_TEMPBAN' AND isnull(unbanned) AND expiration_time > Now()")
|
|
tempbans.Execute()
|
|
|
|
while(TRUE)
|
|
var/ckey
|
|
var/job
|
|
if(permabans.NextRow())
|
|
ckey = permabans.item[1]
|
|
job = permabans.item[2]
|
|
else if(tempbans.NextRow())
|
|
ckey = tempbans.item[1]
|
|
job = tempbans.item[2]
|
|
else
|
|
break
|
|
|
|
jobban_keylist.Add("[ckey] - [job]")
|
|
jobban_assoc_insert(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]")
|
|
|
|
/proc/jobban_unban_client(ckey, rank)
|
|
jobban_remove("[ckey] - [rank]")
|
|
|
|
/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]") )
|
|
// This need to be here, instead of jobban_unban, due to direct calls to jobban_remove
|
|
if(jobban_regex.Find(X))
|
|
var/ckey = jobban_regex.group[1]
|
|
var/rank = jobban_regex.group[2]
|
|
if(jobban_assoclist[ckey] && jobban_assoclist[ckey][rank])
|
|
jobban_assoclist[ckey] -= rank
|
|
else
|
|
log_debug("Attempted to remove non-existent job ban: [X]")
|
|
else
|
|
log_debug("Failed to remove malformed job ban from associative list: [X]")
|
|
jobban_keylist.Remove(jobban_keylist[i])
|
|
if(config.ban_legacy_system)
|
|
jobban_savebanfile()
|
|
return 1
|
|
return 0
|