diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm index 966fdd7667b..c05b864ffc5 100644 --- a/code/modules/admin/NewBan.dm +++ b/code/modules/admin/NewBan.dm @@ -115,7 +115,7 @@ var/savefile/Banlist Banlist["temp"] << temp if (temp) Banlist["minutes"] << bantimestamp - + notes_add(ckey, "Banned - [reason]") return 1 /proc/RemoveBan(foldername) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index b8424dd4e0c..5c4e10e2aa9 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -528,6 +528,7 @@ var/global/BSACooldown = 0 jobban_fullban(M, job, "[reason]; By [usr.ckey] on [time2text(world.realtime)]") if(!msg) msg = job else msg += ", [job]" + notes_add(M.ckey, "Banned from [msg] - [reason]") message_admins("\blue [key_name_admin(usr)] banned [key_name_admin(M)] from [msg]", 1) M << "\redYou have been jobbanned by [usr.client.ckey] from: [msg]." M << "\red The reason is: [reason]" @@ -573,6 +574,26 @@ var/global/BSACooldown = 0 //M.client = null del(M.client) + //Player Notes + if(href_list["notes"]) + var/ckey = href_list["ckey"] + if(!ckey) + var/mob/M = locate(href_list["mob"]) + if(ismob(M)) + ckey = M.ckey + + switch(href_list["notes"]) + if("show") + notes_show(ckey) + if("add") + notes_add(ckey,href_list["text"]) + notes_show(ckey) + if("remove") + notes_remove(ckey,text2num(href_list["from"]),text2num(href_list["to"])) + notes_show(ckey) + return + + if (href_list["removejobban"]) if ((src.rank in list("Game Admin", "Game Master" ))) var/t = href_list["removejobban"] @@ -2194,7 +2215,8 @@ var/global/BSACooldown = 0 body += "Kick | " body += "Ban | " - body += "Jobban " + body += "Jobban | " + body += "Notes " if(M.client) body += "| Prison | " diff --git a/code/modules/admin/player_notes.dm b/code/modules/admin/player_notes.dm new file mode 100644 index 00000000000..9f494297f91 --- /dev/null +++ b/code/modules/admin/player_notes.dm @@ -0,0 +1,83 @@ +//This stuff was originally intended to be integrated into the ban-system I was working on +//but it's safe to say that'll never be finished. So I've merged it into the current player panel. +//enjoy ~Carn + +#define NOTESFILE "data/player_notes.sav" //where the player notes are saved + +obj/admins/proc/notes_show(var/ckey) + usr << browse("Player Notes[notes_gethtml(ckey)]","window=player_notes;size=700x400") + + +obj/admins/proc/notes_gethtml(var/ckey) + var/savefile/notesfile = new(NOTESFILE) + if(!notesfile) return "Error: Cannot access [NOTESFILE]" + if(ckey) + . = "Notes for [ckey]: \[+\] \[-\]
" + notesfile.cd = "/[ckey]" + var/index = 1 + while( !notesfile.eof ) + var/note + notesfile >> note + . += "[note] \[-\]
" + index++ + else + . = "All Notes: \[+\] \[-\]
" + notesfile.cd = "/" + for(var/dir in notesfile.dir) + . += "[dir]
" + return + + +//handles adding notes to the end of a ckey's buffer +//originally had seperate entries such as var/by to record who left the note and when +//but the current bansystem is a heap of dung. +/proc/notes_add(var/ckey, var/note) + if(!ckey) + ckey = ckey(input(usr,"Who would you like to add notes for?","Enter a ckey",null) as text|null) + if(!ckey) return + + if(!note) + note = html_encode(input(usr,"Enter your note:","Enter some text",null) as message|null) + if(!note) return + + var/savefile/notesfile = new(NOTESFILE) + if(!notesfile) return + notesfile.cd = "/[ckey]" + notesfile.eof = 1 //move to the end of the buffer + notesfile << "[time2text(world.realtime,"DD-MMM-YYYY")] | [note][(usr && usr.ckey)?" ~[usr.ckey]":""]" + return + +//handles removing entries from the buffer, or removing the entire directory if no start_index is given +/proc/notes_remove(var/ckey, var/start_index, var/end_index) + var/savefile/notesfile = new(NOTESFILE) + if(!notesfile) return + + if(!ckey) + notesfile.cd = "/" + ckey = ckey(input(usr,"Who would you like to remove notes for?","Enter a ckey",null) as null|anything in notesfile.dir) + if(!ckey) return + + if(start_index) + notesfile.cd = "/[ckey]" + var/list/noteslist = list() + if(!end_index) end_index = start_index + var/index = 0 + while( !notesfile.eof ) + index++ + var/temp + notesfile >> temp + if( (start_index <= index) && (index <= end_index) ) + continue + noteslist += temp + + notesfile.eof = -2 //Move to the start of the buffer and then erase. + + for( var/note in noteslist ) + notesfile << note + else + notesfile.cd = "/" + if(alert(usr,"Are you sure you want to remove all their notes?","Confirmation","No","Yes - Remove all notes") == "Yes - Remove all notes") + notesfile.dir.Remove(ckey) + return + +#undef NOTESFILE \ No newline at end of file diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index ef1226001a5..422212f9768 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -75,6 +75,7 @@ body += ""; body += "PP - " + body += "N - " body += "VV - " body += "TP - " body += "PM - "