mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
I've pretty much stripped everything, added a switch to obj/admins/Topic and linked to a simple browser interface from the player panels. It's just a single buffer per ckey. You can use the [+] and [-] links to add/remove notes. Clicking the ckeys will allow you to navigate between player notes. They are listed chronologically. Their main perk is also their main flaw, they are only a single buffer, which is fast and small. But it kinda means playing with the format won't update existing notes. If you have any complaints about the format please make them known soonish. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4129 316c924e-a436-60f5-8080-3fe189b3f50e
227 lines
6.2 KiB
Plaintext
227 lines
6.2 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
|
|
|
|
/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
|
|
notes_add(ckey, "Banned - [reason]")
|
|
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
|
|
ban_unban_log_save("[key_name_admin(usr)] unbanned [key]")
|
|
log_admin("[key_name_admin(usr)] unbanned [key]")
|
|
message_admins("[key_name_admin(usr)] unbanned: [key]")
|
|
feedback_inc("ban_unban",1)
|
|
|
|
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 = "<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)
|
|
|