var/CMinutes = null var/savefile/Banlist /proc/CheckBan(var/client/clientvar) var/id = clientvar.computer_id var/key = clientvar.ckey Banlist.cd = "/base" if (Banlist.dir.Find("[key][id]")) Banlist.cd = "[key][id]" if (Banlist["temp"]) if (!GetExp(Banlist["minutes"])) ClearTempbans() return 0 else return "[Banlist["reason"]]\n(This ban will be automatically removed in [GetExp(Banlist["minutes"])].)" else Banlist.cd = "/base/[key][id]" return "[Banlist["reason"]]\n(This is a permanent ban)" Banlist.cd = "/base" for (var/A in Banlist.dir) Banlist.cd = "/base/[A]" if (id == Banlist["id"] || key == Banlist["key"]) if(Banlist["temp"]) if (!GetExp(Banlist["minutes"])) ClearTempbans() return 0 else return "[Banlist["reason"]]\n(This ban will be automatically removed in [GetExp(Banlist["minutes"])].)" else return "[Banlist["reason"]]\n(This is a permanent ban)" return 0 /proc/UpdateTime() //No idea why i made this a proc. CMinutes = (world.realtime / 10) / 60 return 1 /proc/LoadBans() Banlist = new("data/banlist.bdb") log_admin("Loading Banlist") if (!length(Banlist.dir)) log_admin("Banlist is empty.") if (!Banlist.dir.Find("base")) log_admin("Banlist missing base dir.") Banlist.dir.Add("base") Banlist.cd = "/base" else if (Banlist.dir.Find("base")) Banlist.cd = "/base" ClearTempbans() return 1 /proc/ClearTempbans() UpdateTime() Banlist.cd = "/base" for (var/A in Banlist.dir) Banlist.cd = "/base/[A]" if (!Banlist["key"] || !Banlist["id"]) RemoveBan(A) log_admin("Invalid Ban.") message_admins("Invalid Ban.") continue if (!Banlist["temp"]) continue if (CMinutes >= Banlist["minutes"]) RemoveBan(A) return 1 /proc/AddBan(ckey, computerid, reason, bannedby, temp, minutes) var/bantimestamp if (temp) UpdateTime() bantimestamp = CMinutes + minutes Banlist.cd = "/base" if ( Banlist.dir.Find("[ckey][computerid]") ) usr << text("\red Ban already exists.") return 0 else Banlist.dir.Add("[ckey][computerid]") Banlist.cd = "/base/[ckey][computerid]" Banlist["key"] << ckey Banlist["id"] << computerid Banlist["reason"] << reason Banlist["bannedby"] << bannedby Banlist["temp"] << temp if (temp) Banlist["minutes"] << bantimestamp return 1 /proc/RemoveBan(foldername) var/key var/id Banlist.cd = "/base/[foldername]" Banlist["key"] >> key Banlist["id"] >> id Banlist.cd = "/base" if (!Banlist.dir.Remove(foldername)) return 0 if(!usr) log_admin("Ban Expired: [key]") message_admins("Ban Expired: [key]") else log_admin("[key_name_admin(usr)] unbanned [key]") message_admins("[key_name_admin(usr)] unbanned: [key]") for (var/A in Banlist.dir) Banlist.cd = "/base/[A]" if (key == Banlist["key"] || id == Banlist["id"]) Banlist.cd = "/base" Banlist.dir.Remove(A) continue return 1 /proc/GetExp(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/unbanpanel() var/count = 0 var/dat //var/dat = "
| (U)(E) Key: [Banlist["key"]] | ([Banlist["temp"] ? "[GetExp(Banlist["minutes"]) ? GetExp(Banlist["minutes"]) : "Removal pending" ]" : "Permaban"]) | (By: [Banlist["bannedby"]]) | (Reason: [Banlist["reason"]]) |