mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-24 16:22:34 +00:00
Removes all \red's and \blues in favor of span classes. \red things that were bold were replaced with danger because it's warning but bold.
230 lines
6.3 KiB
Plaintext
230 lines
6.3 KiB
Plaintext
var/CMinutes = null
|
|
var/savefile/Banlist
|
|
|
|
|
|
/proc/CheckBan(var/ckey, var/id, var/address)
|
|
if(!Banlist) // if Banlist cannot be located for some reason
|
|
LoadBans() // try to load the bans
|
|
if(!Banlist) // uh oh, can't find bans!
|
|
return 0 // ABORT ABORT ABORT
|
|
|
|
. = list()
|
|
var/appeal
|
|
if(config && config.banappeals)
|
|
appeal = "\nFor more information on your ban, or to appeal, head to <a href='[config.banappeals]'>[config.banappeals]</a>"
|
|
Banlist.cd = "/base"
|
|
if( "[ckey][id]" in Banlist.dir )
|
|
Banlist.cd = "[ckey][id]"
|
|
if (Banlist["temp"])
|
|
if (!GetExp(Banlist["minutes"]))
|
|
ClearTempbans()
|
|
return 0
|
|
else
|
|
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]"
|
|
else
|
|
Banlist.cd = "/base/[ckey][id]"
|
|
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: <B>PERMENANT</B>\nBy: [Banlist["bannedby"]][appeal]"
|
|
.["reason"] = "ckey/id"
|
|
return .
|
|
else
|
|
for (var/A in Banlist.dir)
|
|
Banlist.cd = "/base/[A]"
|
|
var/matches
|
|
if( ckey == Banlist["key"] )
|
|
matches += "ckey"
|
|
if( id == Banlist["id"] )
|
|
if(matches)
|
|
matches += "/"
|
|
matches += "id"
|
|
if( address == Banlist["ip"] )
|
|
if(matches)
|
|
matches += "/"
|
|
matches += "ip"
|
|
|
|
if(matches)
|
|
if(Banlist["temp"])
|
|
if (!GetExp(Banlist["minutes"]))
|
|
ClearTempbans()
|
|
return 0
|
|
else
|
|
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]"
|
|
else
|
|
.["desc"] = "\nReason: [Banlist["reason"]]\nExpires: <B>PERMENANT</B>\nBy: [Banlist["bannedby"]][appeal]"
|
|
.["reason"] = matches
|
|
return .
|
|
return 0
|
|
|
|
/proc/UpdateTime() //No idea why i made this a proc.
|
|
CMinutes = (world.realtime / 10) / 60
|
|
return 1
|
|
|
|
/hook/startup/proc/loadBans()
|
|
return LoadBans()
|
|
|
|
/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, address)
|
|
|
|
var/bantimestamp
|
|
|
|
if (temp)
|
|
UpdateTime()
|
|
bantimestamp = CMinutes + minutes
|
|
|
|
Banlist.cd = "/base"
|
|
if ( Banlist.dir.Find("[ckey][computerid]") )
|
|
usr << text("<span class='warning'>Ban already exists.</span>")
|
|
return 0
|
|
else
|
|
Banlist.dir.Add("[ckey][computerid]")
|
|
Banlist.cd = "/base/[ckey][computerid]"
|
|
Banlist["key"] << ckey
|
|
Banlist["id"] << computerid
|
|
Banlist["ip"] << address
|
|
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]",ckey=key)
|
|
message_admins("Ban Expired: [key]")
|
|
else
|
|
ban_unban_log_save("[key_name_admin(usr)] unbanned [key]")
|
|
log_admin("[key_name_admin(usr)] unbanned [key]",admin_key=key_name(usr),ckey=key)
|
|
message_admins("[key_name_admin(usr)] unbanned: [key]")
|
|
feedback_inc("ban_unban",1)
|
|
usr.client.holder.DB_ban_unban( ckey(key), BANTYPE_ANY_FULLBAN)
|
|
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
|
|
|
|
/datum/admins/proc/unbanpanel()
|
|
var/count = 0
|
|
var/dat
|
|
//var/dat = "<HR><B>Unban Player:</B> \blue(U) = Unban , (E) = Edit Ban\green (Total<HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 >"
|
|
Banlist.cd = "/base"
|
|
for (var/A in Banlist.dir)
|
|
count++
|
|
Banlist.cd = "/base/[A]"
|
|
var/ref = "\ref[src]"
|
|
var/key = Banlist["key"]
|
|
var/id = Banlist["id"]
|
|
var/ip = Banlist["ip"]
|
|
var/reason = Banlist["reason"]
|
|
var/by = Banlist["bannedby"]
|
|
var/expiry
|
|
if(Banlist["temp"])
|
|
expiry = GetExp(Banlist["minutes"])
|
|
if(!expiry) expiry = "Removal Pending"
|
|
else expiry = "Permaban"
|
|
|
|
dat += text("<tr><td><A href='?src=[ref];unbanf=[key][id]'>(U)</A><A href='?src=[ref];unbane=[key][id]'>(E)</A> Key: <B>[key]</B></td><td>ComputerID: <B>[id]</B></td><td>IP: <B>[ip]</B></td><td> [expiry]</td><td>(By: [by])</td><td>(Reason: [reason])</td></tr>")
|
|
|
|
dat += "</table>"
|
|
dat = "<HR><B>Bans:</B> <FONT COLOR=blue>(U) = Unban , (E) = Edit Ban</FONT> - <FONT COLOR=green>([count] Bans)</FONT><HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 >[dat]"
|
|
usr << browse(dat, "window=unbanp;size=875x400")
|
|
|
|
//////////////////////////////////// DEBUG ////////////////////////////////////
|
|
|
|
/proc/CreateBans()
|
|
|
|
UpdateTime()
|
|
|
|
var/i
|
|
var/last
|
|
|
|
for(i=0, i<1001, i++)
|
|
var/a = pick(1,0)
|
|
var/b = pick(1,0)
|
|
if(b)
|
|
Banlist.cd = "/base"
|
|
Banlist.dir.Add("trash[i]trashid[i]")
|
|
Banlist.cd = "/base/trash[i]trashid[i]"
|
|
Banlist["key"] << "trash[i]"
|
|
else
|
|
Banlist.cd = "/base"
|
|
Banlist.dir.Add("[last]trashid[i]")
|
|
Banlist.cd = "/base/[last]trashid[i]"
|
|
Banlist["key"] << last
|
|
Banlist["id"] << "trashid[i]"
|
|
Banlist["reason"] << "Trashban[i]."
|
|
Banlist["temp"] << a
|
|
Banlist["minutes"] << CMinutes + rand(1,2000)
|
|
Banlist["bannedby"] << "trashmin"
|
|
last = "trash[i]"
|
|
|
|
Banlist.cd = "/base"
|
|
|
|
/proc/ClearAllBans()
|
|
Banlist.cd = "/base"
|
|
for (var/A in Banlist.dir)
|
|
RemoveBan(A)
|
|
|