Files
GS13NG/modular_citadel/code/modules/mentor/mentor.dm

91 lines
3.0 KiB
Plaintext

GLOBAL_LIST_EMPTY(mentor_datums)
GLOBAL_PROTECT(mentor_datums)
GLOBAL_VAR_INIT(mentor_href_token, GenerateToken())
GLOBAL_PROTECT(mentor_href_token)
/datum/mentors
var/name = "someone's mentor datum"
var/client/owner // the actual mentor, client type
var/target // the mentor's ckey
var/href_token // href token for mentor commands, uses the same token used by admins.
var/mob/following
/datum/mentors/New(ckey)
if(!ckey)
QDEL_IN(src, 0)
CRASH("Mentor datum created without a ckey")
target = ckey(ckey)
name = "[ckey]'s mentor datum"
href_token = GenerateToken()
GLOB.mentor_datums[target] = src
//set the owner var and load commands
owner = GLOB.directory[ckey]
if(owner)
owner.mentor_datum = src
owner.add_mentor_verbs()
if(!check_rights_for(owner, R_ADMIN,0)) // don't add admins to mentor list.
GLOB.mentors += owner
/datum/mentors/proc/CheckMentorHREF(href, href_list)
var/auth = href_list["mentor_token"]
. = auth && (auth == href_token || auth == GLOB.mentor_href_token)
if(.)
return
var/msg = !auth ? "no" : "a bad"
message_admins("[key_name_admin(usr)] clicked an href with [msg] authorization key!")
if(CONFIG_GET(flag/debug_admin_hrefs))
message_admins("Debug mode enabled, call not blocked. Please ask your coders to review this round's logs.")
log_world("UAH: [href]")
return TRUE
log_admin_private("[key_name(usr)] clicked an href with [msg] authorization key! [href]")
/proc/RawMentorHrefToken(forceGlobal = FALSE)
var/tok = GLOB.mentor_href_token
if(!forceGlobal && usr)
var/client/C = usr.client
to_chat(world, C)
to_chat(world, usr)
if(!C)
CRASH("No client for HrefToken()!")
var/datum/mentors/holder = C.mentor_datum
if(holder)
tok = holder.href_token
return tok
/proc/MentorHrefToken(forceGlobal = FALSE)
return "mentor_token=[RawMentorHrefToken(forceGlobal)]"
/proc/load_mentors()
usr = null
GLOB.mentor_datums.Cut()
for(var/client/C in GLOB.mentors)
C.remove_mentor_verbs()
C.mentor_datum = null
GLOB.mentors.Cut()
if(CONFIG_GET(flag/mentor_legacy_system))//legacy
var/list/lines = world.file2list("config/mentors.txt")
for(var/line in lines)
if(!length(line))
continue
if(findtextEx(line, "#", 1, 2))
continue
new /datum/mentors(line)
else//Database
if(!SSdbcore.Connect())
log_world("Failed to connect to database in load_mentors(). Reverting to legacy system.")
WRITE_FILE(GLOB.world_game_log, "Failed to connect to database in load_mentors(). Reverting to legacy system.")
CONFIG_SET(flag/mentor_legacy_system, TRUE)
load_mentors()
return
var/datum/DBQuery/query_load_mentors = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("mentor")]")
if(!query_load_mentors.Execute())
return
while(query_load_mentors.NextRow())
var/ckey = ckey(query_load_mentors.item[1])
new /datum/mentors(ckey)
// new client var: mentor_datum. Acts the same way holder does towards admin: it holds the mentor datum. if set, the guy's a mentor.
/client
var/datum/mentors/mentor_datum