//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 datum/admins/proc/notes_show(var/ckey) usr << browse("Player Notes[notes_gethtml(ckey)]","window=player_notes;size=700x400") datum/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 */ //Hijacking this file for BS12 playernotes functions. I like this ^ one systemm alright, but converting sounds too bothersome~ Chinsky. //Moved stuff here because well, this is the notes file >_< /datum/player_info/var/author // admin who authored the information /datum/player_info/var/rank //rank of admin who made the notes /datum/player_info/var/content // text content of the information /datum/player_info/var/timestamp // Because this is bloody annoying #define PLAYER_NOTES_ENTRIES_PER_PAGE 50 /datum/admins/proc/PlayerNotes() set category = "Admin" set name = "Player Notes" if (!istype(src,/datum/admins)) src = usr.client.holder /* if (!istype(src,/datum/admins)) usr << "Error: you are not an admin!" return */ if(!check_rights(R_ADMIN|R_MOD)) return if(config.ban_legacy_system) PlayerNotesPage(1) else show_notes_sql() /datum/admins/proc/PlayerNotesPage(page) var/dat = "Player notes
" var/savefile/S=new("data/player_notes.sav") var/list/note_keys S >> note_keys if(!note_keys) dat += "No notes found." else dat += "" note_keys = sortList(note_keys) // Display the notes on the current page var/number_pages = note_keys.len / PLAYER_NOTES_ENTRIES_PER_PAGE // Emulate ceil(why does BYOND not have ceil) if(number_pages != round(number_pages)) number_pages = round(number_pages) + 1 var/page_index = page - 1 if(page_index < 0 || page_index >= number_pages) return var/lower_bound = page_index * PLAYER_NOTES_ENTRIES_PER_PAGE + 1 var/upper_bound = (page_index + 1) * PLAYER_NOTES_ENTRIES_PER_PAGE upper_bound = min(upper_bound, note_keys.len) for(var/index = lower_bound, index <= upper_bound, index++) var/t = note_keys[index] dat += "" dat += "
[t]

" // Display a footer to select different pages for(var/index = 1, index <= number_pages, index++) if(index == page) dat += "" dat += "[index] " if(index == page) dat += "" usr << browse(dat, "window=player_notes;size=400x400") /datum/admins/proc/player_has_info(var/key as text) var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav") var/list/infos info >> infos if(!infos || !infos.len) return 0 else return 1 /datum/admins/proc/show_player_info(var/key as text) set category = "Admin" set name = "Show Player Info" if (!istype(src,/datum/admins)) src = usr.client.holder if (!istype(src,/datum/admins)) usr << "Error: you are not an admin!" return if(config.ban_legacy_system) var/dat = "Info on [key]" dat += "" var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav") var/list/infos info >> infos if(!infos) dat += "No information found on the given key.
" else var/update_file = 0 var/i = 0 for(var/datum/player_info/I in infos) i += 1 if(!I.timestamp) I.timestamp = "Pre-4/3/2012" update_file = 1 if(!I.rank) I.rank = "N/A" update_file = 1 dat += "[I.content] by [I.author] ([I.rank]) on [I.timestamp] " if(I.author == usr.key || I.author == "Adminbot") dat += "Remove" dat += "

" if(update_file) info << infos dat += "
" dat += "Add Comment
" dat += "" usr << browse(dat, "window=adminplayerinfo;size=480x480") else show_notes_sql(key) /proc/notes_add(var/key, var/note, var/mob/usr) if (!key || !note) return //Master safety and override for SQL based noting: if(!config.ban_legacy_system) notes_add_sql(key, note, usr) return //Loading list of notes for this key var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav") var/list/infos info >> infos if(!infos) infos = list() //Overly complex timestamp creation var/modifyer = "th" switch(time2text(world.timeofday, "DD")) if("01","21","31") modifyer = "st" if("02","22",) modifyer = "nd" if("03","23") modifyer = "rd" var/day_string = "[time2text(world.timeofday, "DD")][modifyer]" if(copytext(day_string,1,2) == "0") day_string = copytext(day_string,2) var/full_date = time2text(world.timeofday, "DDD, Month DD of YYYY") var/day_loc = findtext(full_date, time2text(world.timeofday, "DD")) var/datum/player_info/P = new if (usr) P.author = usr.key P.rank = usr.client.holder.rank else P.author = "Adminbot" P.rank = "Friendly Robot" P.content = note P.timestamp = "[copytext(full_date,1,day_loc)][day_string][copytext(full_date,day_loc+2)]" infos += P info << infos message_admins("\blue [key_name_admin(usr)] has edited [key]'s notes.") log_admin("[key_name(usr)] has edited [key]'s notes.") del info //Updating list of keys with notes on them var/savefile/note_list = new("data/player_notes.sav") var/list/note_keys note_list >> note_keys if(!note_keys) note_keys = list() if(!note_keys.Find(key)) note_keys += key note_list << note_keys del note_list /proc/notes_del(var/key, var/index) var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav") var/list/infos info >> infos if(!infos || infos.len < index) return var/datum/player_info/item = infos[index] infos.Remove(item) info << infos message_admins("\blue [key_name_admin(usr)] deleted one of [key]'s notes.") log_admin("[key_name(usr)] deleted one of [key]'s notes.") del info /proc/show_player_info_irc(var/key as text) var/dat = " Info on [key]%0D%0A" var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav") var/list/infos info >> infos if(!infos) dat = "No information found on the given key." else for(var/datum/player_info/I in infos) dat += "[I.content]%0D%0Aby [I.author] ([I.rank]) on [I.timestamp]%0D%0A%0D%0A" return dat