diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 48b3260dd7..4ef681d5da 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -1,7 +1,7 @@ //Update this whenever the db schema changes //make sure you add an update to the schema_version stable in the db changelog #define DB_MAJOR_VERSION 4 -#define DB_MINOR_VERSION 4 +#define DB_MINOR_VERSION 5 //Timing subsystem //Don't run if there is an identical unique timer active diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 1fefb27497..51f0a28bd2 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -219,7 +219,7 @@ /proc/random_unique_moth_name(attempts_to_find_unique_name=10) for(var/i in 1 to attempts_to_find_unique_name) . = capitalize(pick(GLOB.moth_first)) + " " + capitalize(pick(GLOB.moth_last)) - + if(!findname(.)) break @@ -292,15 +292,15 @@ Proc for attack log creation, because really why not var/starget = "NON-EXISTENT SUBJECT" if(target) - if(is_mob_target && target.ckey) - starget = "[target.name]([target.ckey])" + if(is_mob_target && target.key) + starget = "[target.name]([target.key])" else starget = "[target.name]" var/ssource = "NON-EXISTENT USER" //How!? if(user) - if(is_mob_user && user.ckey) - ssource = "[user.name]([user.ckey])" + if(is_mob_user && user.key) + ssource = "[user.name]([user.key])" else ssource = "[user.name]" diff --git a/code/controllers/subsystem/medals.dm b/code/controllers/subsystem/medals.dm index 21366978f6..8b69726af1 100644 --- a/code/controllers/subsystem/medals.dm +++ b/code/controllers/subsystem/medals.dm @@ -14,8 +14,8 @@ SUBSYSTEM_DEF(medals) return if(isnull(world.SetMedal(medal, player, CONFIG_GET(string/medal_hub_address), CONFIG_GET(string/medal_hub_password)))) hub_enabled = FALSE - log_game("MEDAL ERROR: Could not contact hub to award medal:[medal] player:[player.ckey]") - message_admins("Error! Failed to contact hub to award [medal] medal to [player.ckey]!") + log_game("MEDAL ERROR: Could not contact hub to award medal:[medal] player:[player.key]") + message_admins("Error! Failed to contact hub to award [medal] medal to [player.key]!") return to_chat(player, "Achievement unlocked: [medal]!") @@ -38,8 +38,8 @@ SUBSYSTEM_DEF(medals) if(isnull(world.SetScores(player.ckey, newscoreparam, CONFIG_GET(string/medal_hub_address), CONFIG_GET(string/medal_hub_password)))) hub_enabled = FALSE - log_game("SCORE ERROR: Could not contact hub to set score. Score:[score] player:[player.ckey]") - message_admins("Error! Failed to contact hub to set [score] score for [player.ckey]!") + log_game("SCORE ERROR: Could not contact hub to set score. Score:[score] player:[player.key]") + message_admins("Error! Failed to contact hub to set [score] score for [player.key]!") /datum/controller/subsystem/medals/proc/GetScore(score, client/player, returnlist) if(!score || !hub_enabled) @@ -48,8 +48,8 @@ SUBSYSTEM_DEF(medals) var/scoreget = world.GetScores(player.ckey, score, CONFIG_GET(string/medal_hub_address), CONFIG_GET(string/medal_hub_password)) if(isnull(scoreget)) hub_enabled = FALSE - log_game("SCORE ERROR: Could not contact hub to get score. Score:[score] player:[player.ckey]") - message_admins("Error! Failed to contact hub to get score: [score] for [player.ckey]!") + log_game("SCORE ERROR: Could not contact hub to get score. Score:[score] player:[player.key]") + message_admins("Error! Failed to contact hub to get score: [score] for [player.key]!") return . = params2list(scoreget) if(!returnlist) @@ -61,8 +61,8 @@ SUBSYSTEM_DEF(medals) if(isnull(world.GetMedal(medal, player, CONFIG_GET(string/medal_hub_address), CONFIG_GET(string/medal_hub_password)))) hub_enabled = FALSE - log_game("MEDAL ERROR: Could not contact hub to get medal:[medal] player: [player.ckey]") - message_admins("Error! Failed to contact hub to get [medal] medal for [player.ckey]!") + log_game("MEDAL ERROR: Could not contact hub to get medal:[medal] player: [player.key]") + message_admins("Error! Failed to contact hub to get [medal] medal for [player.key]!") return to_chat(player, "[medal] is unlocked") @@ -73,15 +73,15 @@ SUBSYSTEM_DEF(medals) switch(result) if(null) hub_enabled = FALSE - log_game("MEDAL ERROR: Could not contact hub to clear medal:[medal] player:[player.ckey]") - message_admins("Error! Failed to contact hub to clear [medal] medal for [player.ckey]!") + log_game("MEDAL ERROR: Could not contact hub to clear medal:[medal] player:[player.key]") + message_admins("Error! Failed to contact hub to clear [medal] medal for [player.key]!") if(TRUE) - message_admins("Medal: [medal] removed for [player.ckey]") + message_admins("Medal: [medal] removed for [player.key]") if(FALSE) - message_admins("Medal: [medal] was not found for [player.ckey]. Unable to clear.") + message_admins("Medal: [medal] was not found for [player.key]. Unable to clear.") /datum/controller/subsystem/medals/proc/ClearScore(client/player) if(isnull(world.SetScores(player.ckey, "", CONFIG_GET(string/medal_hub_address), CONFIG_GET(string/medal_hub_password)))) - log_game("MEDAL ERROR: Could not contact hub to clear scores for [player.ckey]!") - message_admins("Error! Failed to contact hub to clear scores for [player.ckey]!") \ No newline at end of file + log_game("MEDAL ERROR: Could not contact hub to clear scores for [player.key]!") + message_admins("Error! Failed to contact hub to clear scores for [player.key]!") \ No newline at end of file diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm index a1f6ff15fb..4803d49ef9 100644 --- a/code/datums/brain_damage/split_personality.dm +++ b/code/datums/brain_damage/split_personality.dm @@ -61,7 +61,7 @@ current_backseat = owner_backseat free_backseat = stranger_backseat - log_game("[key_name(current_backseat)] assumed control of [key_name(owner)] due to [src]. (Original owner: [current_controller == OWNER ? owner.ckey : current_backseat.ckey])") + log_game("[key_name(current_backseat)] assumed control of [key_name(owner)] due to [src]. (Original owner: [current_controller == OWNER ? owner.key : current_backseat.key])") to_chat(owner, "You feel your control being taken away... your other personality is in charge now!") to_chat(current_backseat, "You manage to take control of your body!") diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index c08239af30..e6f79c67b0 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -79,7 +79,7 @@ if(!A.secondsElectrified) A.set_electrified(30) if(usr) - LAZYADD(A.shockedby, text("\[[time_stamp()]\][usr](ckey:[usr.ckey])")) + LAZYADD(A.shockedby, text("\[[time_stamp()]\] [key_name(usr)]")) add_logs(usr, A, "electrified") if(WIRE_SAFETY) A.safe = !A.safe @@ -134,7 +134,7 @@ if(A.secondsElectrified != -1) A.set_electrified(-1) if(usr) - LAZYADD(A.shockedby, text("\[[time_stamp()]\][usr](ckey:[usr.ckey])")) + LAZYADD(A.shockedby, text("\[[time_stamp()]\] [key_name(usr)]")) add_logs(usr, A, "electrified") if(WIRE_SAFETY) // Cut to disable safeties, mend to re-enable. A.safe = mend diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 5b23abea26..85c2ddd877 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -443,23 +443,23 @@ continue // never had a client if(L.ckey && !GLOB.directory[L.ckey]) - msg += "[L.name] ([L.ckey]), the [L.job] (Disconnected)\n" + msg += "[L.name] ([L.key]), the [L.job] (Disconnected)\n" if(L.ckey && L.client) var/failed = FALSE if(L.client.inactivity >= (ROUNDSTART_LOGOUT_REPORT_TIME / 2)) //Connected, but inactive (alt+tabbed or something) - msg += "[L.name] ([L.ckey]), the [L.job] (Connected, Inactive)\n" + msg += "[L.name] ([L.key]), the [L.job] (Connected, Inactive)\n" failed = TRUE //AFK client if(!failed && L.stat) if(L.suiciding) //Suicider - msg += "[L.name] ([L.ckey]), the [L.job] (Suicide)\n" + msg += "[L.name] ([L.key]), the [L.job] (Suicide)\n" failed = TRUE //Disconnected client if(!failed && L.stat == UNCONSCIOUS) - msg += "[L.name] ([L.ckey]), the [L.job] (Dying)\n" + msg += "[L.name] ([L.key]), the [L.job] (Dying)\n" failed = TRUE //Unconscious if(!failed && L.stat == DEAD) - msg += "[L.name] ([L.ckey]), the [L.job] (Dead)\n" + msg += "[L.name] ([L.key]), the [L.job] (Dead)\n" failed = TRUE //Dead var/p_ckey = L.client.ckey diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index 166da28435..1c1944e73e 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -136,7 +136,7 @@ if(I && istype(I) && I.imp_in) var/mob/living/R = I.imp_in to_chat(R, "You hear a voice in your head saying: '[warning]'") - log_talk(usr,"[key_name(usr)] sent an implant message to [R]/[R.ckey]: '[warning]'",LOGSAY) + log_talk(usr,"[key_name(usr)] sent an implant message to [key_name(R)]: '[warning]'",LOGSAY) src.add_fingerprint(usr) src.updateUsrDialog() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 51b3991366..45355ffac7 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1280,7 +1280,7 @@ bolt() //Bolt it! set_electrified(ELECTRIFIED_PERMANENT) //Shock it! if(origin) - LAZYADD(shockedby, "\[[time_stamp()]\][origin](ckey:[origin.ckey])") + LAZYADD(shockedby, "\[[time_stamp()]\] [key_name(origin)]") /obj/machinery/door/airlock/disable_lockdown() @@ -1549,7 +1549,7 @@ if(wires.is_cut(WIRE_SHOCK)) to_chat(user, "The electrification wire has been cut") else - LAZYADD(shockedby, "\[[time_stamp()]\][user](ckey:[user.ckey])") + LAZYADD(shockedby, "\[[time_stamp()]\] [key_name(user)]") add_logs(user, src, "electrified") set_electrified(AI_ELECTRIFY_DOOR_TIME) @@ -1559,7 +1559,7 @@ if(wires.is_cut(WIRE_SHOCK)) to_chat(user, "The electrification wire has been cut") else - LAZYADD(shockedby, text("\[[time_stamp()]\][user](ckey:[user.ckey])")) + LAZYADD(shockedby, text("\[[time_stamp()]\] [key_name(user)]")) add_logs(user, src, "electrified") set_electrified(ELECTRIFIED_PERMANENT) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index a247f4c125..111ce3ccca 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -256,10 +256,10 @@ GLOBAL_LIST_EMPTY(crematoriums) if (M.stat != DEAD) M.emote("scream") if(user) - user.log_message("Cremated [M]/[M.ckey]", INDIVIDUAL_ATTACK_LOG) - log_attack("[user]/[user.ckey] cremated [M]/[M.ckey]") + user.log_message("Cremated [key_name(M)]", INDIVIDUAL_ATTACK_LOG) + log_attack("[key_name(user)] cremated [key_name(M)]") else - log_attack("UNKNOWN cremated [M]/[M.ckey]") + log_attack("UNKNOWN cremated [key_name(M)]") M.death(1) if(M) //some animals get automatically deleted on death. M.ghostize() diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm index fd95783525..ceabbb0734 100644 --- a/code/modules/admin/DB_ban/functions.dm +++ b/code/modules/admin/DB_ban/functions.dm @@ -2,7 +2,7 @@ #define MAX_ADMIN_BANS_PER_HEADMIN 3 //Either pass the mob you wish to ban in the 'banned_mob' attribute, or the banckey, banip and bancid variables. If both are passed, the mob takes priority! If a mob is not passed, banckey is the minimum that needs to be passed! banip and bancid are optional. -/datum/admins/proc/DB_ban_record(bantype, mob/banned_mob, duration = -1, reason, job = "", banckey = null, banip = null, bancid = null) +/datum/admins/proc/DB_ban_record(bantype, mob/banned_mob, duration = -1, reason, job = "", bankey = null, banip = null, bancid = null) if(!check_rights(R_BAN)) return @@ -64,23 +64,24 @@ if(ismob(banned_mob)) ckey = banned_mob.ckey + bankey = banned_mob.key if(banned_mob.client) computerid = banned_mob.client.computer_id ip = banned_mob.client.address else computerid = banned_mob.computer_id ip = banned_mob.lastKnownIP - else if(banckey) - ckey = ckey(banckey) + else if(bankey) + ckey = ckey(bankey) computerid = bancid ip = banip - + var/had_banned_mob = banned_mob != null var/client/banned_client = banned_mob?.client var/banned_mob_guest_key = had_banned_mob && IsGuestKey(banned_mob.key) banned_mob = null - var/datum/DBQuery/query_add_ban_get_ckey = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ckey = '[ckey]'") + var/datum/DBQuery/query_add_ban_get_ckey = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("player")] WHERE ckey = '[ckey]'") if(!query_add_ban_get_ckey.warn_execute()) qdel(query_add_ban_get_ckey) return @@ -88,14 +89,16 @@ qdel(query_add_ban_get_ckey) if(!seen_before) if(!had_banned_mob || (had_banned_mob && !banned_mob_guest_key)) - if(alert(usr, "[ckey] has not been seen before, are you sure you want to create a ban for them?", "Unknown ckey", "Yes", "No", "Cancel") != "Yes") + if(alert(usr, "[bankey] has not been seen before, are you sure you want to create a ban for them?", "Unknown ckey", "Yes", "No", "Cancel") != "Yes") return + var/a_key var/a_ckey var/a_computerid var/a_ip if(istype(owner)) + a_key = owner.key a_ckey = owner.ckey a_computerid = owner.computer_id a_ip = owner.address @@ -147,17 +150,17 @@ return qdel(query_add_ban) to_chat(usr, "Ban saved to database.") - var/msg = "[key_name_admin(usr)] has added a [bantype_str] for [ckey] [(job)?"([job])":""] [(duration > 0)?"([duration] minutes)":""] with the reason: \"[reason]\" to the ban database." + var/msg = "[key_name_admin(usr)] has added a [bantype_str] for [bankey] [(job)?"([job])":""] [(duration > 0)?"([duration] minutes)":""] with the reason: \"[reason]\" to the ban database." message_admins(msg,1) var/datum/admin_help/AH = admin_ticket_log(ckey, msg) if(announceinirc) - send2irc("BAN ALERT","[a_ckey] applied a [bantype_str] on [ckey]") + send2irc("BAN ALERT","[a_key] applied a [bantype_str] on [bankey]") if(kickbannedckey) if(AH) AH.Resolve() //with prejudice - if(banned_client && banned_client.ckey == banckey) + if(banned_client && banned_client.ckey == ckey) qdel(banned_client) return 1 @@ -249,18 +252,18 @@ to_chat(usr, "Cancelled") return - var/datum/DBQuery/query_edit_ban_get_details = SSdbcore.NewQuery("SELECT ckey, duration, reason FROM [format_table_name("ban")] WHERE id = [banid]") + var/datum/DBQuery/query_edit_ban_get_details = SSdbcore.NewQuery("SELECT (SELECT byond_key FROM [format_table_name("player")] WHERE [format_table_name("player")].ckey = [format_table_name("ban")].ckey), duration, reason FROM [format_table_name("ban")] WHERE id = [banid]") if(!query_edit_ban_get_details.warn_execute()) qdel(query_edit_ban_get_details) return - var/eckey = usr.ckey //Editing admin ckey - var/pckey //(banned) Player ckey + var/e_key = usr.key //Editing admin key + var/p_key //(banned) Player key var/duration //Old duration var/reason //Old reason if(query_edit_ban_get_details.NextRow()) - pckey = query_edit_ban_get_details.item[1] + p_key = query_edit_ban_get_details.item[1] duration = query_edit_ban_get_details.item[2] reason = query_edit_ban_get_details.item[3] else @@ -275,33 +278,33 @@ switch(param) if("reason") if(!value) - value = input("Insert the new reason for [pckey]'s ban", "New Reason", "[reason]", null) as null|text + value = input("Insert the new reason for [p_key]'s ban", "New Reason", "[reason]", null) as null|text value = sanitizeSQL(value) if(!value) to_chat(usr, "Cancelled") return - var/datum/DBQuery/query_edit_ban_reason = SSdbcore.NewQuery("UPDATE [format_table_name("ban")] SET reason = '[value]', edits = CONCAT(edits,'- [eckey] changed ban reason from \\\"[reason]\\\" to \\\"[value]\\\"
') WHERE id = [banid]") + var/datum/DBQuery/query_edit_ban_reason = SSdbcore.NewQuery("UPDATE [format_table_name("ban")] SET reason = '[value]', edits = CONCAT(edits,'- [e_key] changed ban reason from \\\"[reason]\\\" to \\\"[value]\\\"
') WHERE id = [banid]") if(!query_edit_ban_reason.warn_execute()) qdel(query_edit_ban_reason) return qdel(query_edit_ban_reason) - message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s reason from [reason] to [value]") + message_admins("[key_name_admin(usr)] has edited a ban for [p_key]'s reason from [reason] to [value]") if("duration") if(!value) - value = input("Insert the new duration (in minutes) for [pckey]'s ban", "New Duration", "[duration]", null) as null|num + value = input("Insert the new duration (in minutes) for [p_key]'s ban", "New Duration", "[duration]", null) as null|num if(!isnum(value) || !value) to_chat(usr, "Cancelled") return - var/datum/DBQuery/query_edit_ban_duration = SSdbcore.NewQuery("UPDATE [format_table_name("ban")] SET duration = [value], edits = CONCAT(edits,'- [eckey] changed ban duration from [duration] to [value]
'), expiration_time = DATE_ADD(bantime, INTERVAL [value] MINUTE) WHERE id = [banid]") + var/datum/DBQuery/query_edit_ban_duration = SSdbcore.NewQuery("UPDATE [format_table_name("ban")] SET duration = [value], edits = CONCAT(edits,'- [e_key] changed ban duration from [duration] to [value]
'), expiration_time = DATE_ADD(bantime, INTERVAL [value] MINUTE) WHERE id = [banid]") if(!query_edit_ban_duration.warn_execute()) qdel(query_edit_ban_duration) return qdel(query_edit_ban_duration) - message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s duration from [duration] to [value]") + message_admins("[key_name_admin(usr)] has edited a ban for [p_key]'s duration from [duration] to [value]") if("unban") - if(alert("Unban [pckey]?", "Unban?", "Yes", "No") == "Yes") + if(alert("Unban [p_key]?", "Unban?", "Yes", "No") == "Yes") DB_ban_unban_by_id(banid) return else @@ -316,20 +319,20 @@ if(!check_rights(R_BAN)) return - var/sql = "SELECT ckey FROM [format_table_name("ban")] WHERE id = [id]" + var/sql = "SELECT (SELECT byond_key FROM [format_table_name("player")] WHERE [format_table_name("player")].ckey = [format_table_name("ban")].ckey) FROM [format_table_name("ban")] WHERE id = [id]" if(!SSdbcore.Connect()) return var/ban_number = 0 //failsafe - var/pckey + var/p_key var/datum/DBQuery/query_unban_get_ckey = SSdbcore.NewQuery(sql) if(!query_unban_get_ckey.warn_execute()) qdel(query_unban_get_ckey) return while(query_unban_get_ckey.NextRow()) - pckey = query_unban_get_ckey.item[1] + p_key = query_unban_get_ckey.item[1] ban_number++; qdel(query_unban_get_ckey) @@ -354,7 +357,7 @@ qdel(query_unban) return qdel(query_unban) - message_admins("[key_name_admin(usr)] has lifted [pckey]'s ban.") + message_admins("[key_name_admin(usr)] has lifted [p_key]'s ban.") /client/proc/DB_ban_panel() set category = "Admin" @@ -399,7 +402,7 @@ output += "" output += "" output += "" - output += "Ckey: " + output += "Key: " output += "IP: " output += "Computer id: " output += "Duration: " @@ -474,7 +477,7 @@ output += "OPTIONS" output += "" var/limit = " LIMIT [bansperpage * page], [bansperpage]" - var/datum/DBQuery/query_search_bans = SSdbcore.NewQuery("SELECT id, bantime, bantype, reason, job, duration, expiration_time, ckey, a_ckey, unbanned, unbanned_ckey, unbanned_datetime, edits, round_id FROM [format_table_name("ban")] WHERE [search] ORDER BY bantime DESC[limit]") + var/datum/DBQuery/query_search_bans = SSdbcore.NewQuery("SELECT id, bantime, bantype, reason, job, duration, expiration_time, (SELECT byond_key FROM [format_table_name("player")] WHERE [format_table_name("player")].ckey = [format_table_name("ban")].ckey), (SELECT byond_key FROM [format_table_name("player")] WHERE [format_table_name("player")].ckey = [format_table_name("ban")].a_ckey), unbanned, (SELECT byond_key FROM [format_table_name("player")] WHERE [format_table_name("player")].ckey = [format_table_name("ban")].unbanned_ckey), unbanned_datetime, edits, round_id FROM [format_table_name("ban")] WHERE [search] ORDER BY bantime DESC[limit]") if(!query_search_bans.warn_execute()) qdel(query_search_bans) return @@ -487,10 +490,10 @@ var/job = query_search_bans.item[5] var/duration = query_search_bans.item[6] var/expiration = query_search_bans.item[7] - var/ckey = query_search_bans.item[8] - var/ackey = query_search_bans.item[9] + var/ban_key = query_search_bans.item[8] + var/a_key = query_search_bans.item[9] var/unbanned = query_search_bans.item[10] - var/unbanckey = query_search_bans.item[11] + var/unban_key = query_search_bans.item[11] var/unbantime = query_search_bans.item[12] var/edits = query_search_bans.item[13] var/round_id = query_search_bans.item[14] @@ -518,9 +521,9 @@ output += "" output += "[typedesc]" - output += "[ckey]" + output += "[ban_key]" output += "[bantime] (Round ID: [round_id])" - output += "[ackey]" + output += "[a_key]" output += "[(unbanned) ? "" : "Unban"]" output += "" output += "" @@ -535,7 +538,7 @@ output += "" if(unbanned) output += "" - output += "UNBANNED by admin [unbanckey] on [unbantime]" + output += "UNBANNED by admin [unban_key] on [unbantime]" output += "" output += "" output += " " diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index f00a2339a1..7d9e50d070 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -23,7 +23,7 @@ //Whitelist if(CONFIG_GET(flag/usewhitelist)) - if(!check_whitelist(ckey(key))) + if(!check_whitelist(ckey)) if (admin) log_admin("The admin [key] has been allowed to bypass the whitelist") message_admins("The admin [key] has been allowed to bypass the whitelist") @@ -39,7 +39,7 @@ return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.") if (CONFIG_GET(flag/panic_bunker) && SSdbcore.Connect()) log_access("Failed Login: [key] - Guests not allowed during panic bunker") - return list("reason"="guest", "desc"="\nReason: You must first join the Discord to verify your account before joining this server. To do so, read the rules and post a request in the #station-access-requests channel under the \"Main server\" category in the Discord server linked here: https://discord.gg/E6SQuhz") + return list("reason"="guest", "desc"="\nReason: Sorry but the server is currently not accepting connections from never before seen players or guests. If you have played on this server with a byond account before, please log in to the byond account you have played from.") //Population Cap Checking var/extreme_popcap = CONFIG_GET(number/extreme_popcap) @@ -50,7 +50,7 @@ if(CONFIG_GET(flag/ban_legacy_system)) //Ban Checking - . = CheckBan( ckey(key), computer_id, address ) + . = CheckBan(ckey, computer_id, address ) if(.) if (admin) log_admin("The admin [key] has been allowed to bypass a matching ban on [.["key"]]") @@ -61,11 +61,8 @@ return . else - - var/ckeytext = ckey(key) - if(!SSdbcore.Connect()) - var/msg = "Ban database connection failure. Key [ckeytext] not checked" + var/msg = "Ban database connection failure. Key [ckey] not checked" log_world(msg) message_admins(msg) return @@ -78,13 +75,13 @@ if(computer_id) cidquery = " OR computerid = '[computer_id]' " - var/datum/DBQuery/query_ban_check = SSdbcore.NewQuery("SELECT ckey, a_ckey, reason, expiration_time, duration, bantime, bantype, id, round_id FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)") - if(!query_ban_check.Execute()) + var/datum/DBQuery/query_ban_check = SSdbcore.NewQuery("SELECT (SELECT byond_key FROM [format_table_name("player")] WHERE [format_table_name("player")].ckey = [format_table_name("ban")].ckey), (SELECT byond_key FROM [format_table_name("player")] WHERE [format_table_name("player")].ckey = [format_table_name("ban")].a_ckey), reason, expiration_time, duration, bantime, bantype, id, round_id FROM [format_table_name("ban")] WHERE (ckey = '[ckey]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)") + if(!query_ban_check.Execute(async = TRUE)) qdel(query_ban_check) return while(query_ban_check.NextRow()) - var/pckey = query_ban_check.item[1] - var/ackey = query_ban_check.item[2] + var/pkey = query_ban_check.item[1] + var/akey = query_ban_check.item[2] var/reason = query_ban_check.item[3] var/expiration = query_ban_check.item[4] var/duration = query_ban_check.item[5] @@ -95,16 +92,16 @@ if (bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN") //admin bans MUST match on ckey to prevent cid-spoofing attacks // as well as dynamic ip abuse - if (pckey != ckey) + if (ckey(pkey) != ckey) continue if (admin) if (bantype == "ADMIN_PERMABAN" || bantype == "ADMIN_TEMPBAN") log_admin("The admin [key] is admin banned (#[banid]), and has been disallowed access") message_admins("The admin [key] is admin banned (#[banid]), and has been disallowed access") else - log_admin("The admin [key] has been allowed to bypass a matching ban on [pckey] (#[banid])") - message_admins("The admin [key] has been allowed to bypass a matching ban on [pckey] (#[banid])") - addclientmessage(ckey,"You have been allowed to bypass a matching ban on [pckey] (#[banid])") + log_admin("The admin [key] has been allowed to bypass a matching ban on [pkey] (#[banid])") + message_admins("The admin [key] has been allowed to bypass a matching ban on [pkey] (#[banid])") + addclientmessage(ckey,"You have been allowed to bypass a matching ban on [pkey] (#[banid])") continue var/expires = "" if(text2num(duration) > 0) @@ -112,7 +109,7 @@ else expires = " The is a permanent ban." - var/desc = "\nReason: You, or another user of this computer or connection ([pckey]) is banned from playing here. The ban reason is:\n[reason]\nThis ban (BanID #[banid]) was applied by [ackey] on [bantime] during round ID [ban_round_id], [expires]" + var/desc = "\nReason: You, or another user of this computer or connection ([pkey]) is banned from playing here. The ban reason is:\n[reason]\nThis ban (BanID #[banid]) was applied by [akey] on [bantime] during round ID [ban_round_id], [expires]" . = list("reason"="[bantype]", "desc"="[desc]") diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm index 1e092a16e9..d81d037c50 100644 --- a/code/modules/admin/NewBan.dm +++ b/code/modules/admin/NewBan.dm @@ -98,22 +98,22 @@ GLOBAL_PROTECT(Banlist) return 1 -/proc/AddBan(ckey, computerid, reason, bannedby, temp, minutes, address) +/proc/AddBan(key, computerid, reason, bannedby, temp, minutes, address) var/bantimestamp - + var/ban_ckey = ckey(key) if (temp) UpdateTime() bantimestamp = GLOB.CMinutes + minutes GLOB.Banlist.cd = "/base" - if ( GLOB.Banlist.dir.Find("[ckey][computerid]") ) + if ( GLOB.Banlist.dir.Find("[ban_ckey][computerid]") ) to_chat(usr, text("Ban already exists.")) return 0 else - GLOB.Banlist.dir.Add("[ckey][computerid]") - GLOB.Banlist.cd = "/base/[ckey][computerid]" - WRITE_FILE(GLOB.Banlist["key"], ckey) + GLOB.Banlist.dir.Add("[ban_ckey][computerid]") + GLOB.Banlist.cd = "/base/[ban_ckey][computerid]" + WRITE_FILE(GLOB.Banlist["key"], ban_ckey) WRITE_FILE(GLOB.Banlist["id"], computerid) WRITE_FILE(GLOB.Banlist["ip"], address) WRITE_FILE(GLOB.Banlist["reason"], reason) @@ -123,9 +123,9 @@ GLOBAL_PROTECT(Banlist) if (temp) WRITE_FILE(GLOB.Banlist["minutes"], bantimestamp) if(!temp) - create_message("note", ckey, bannedby, "Permanently banned - [reason]", null, null, 0, 0) + create_message("note", key, bannedby, "Permanently banned - [reason]", null, null, 0, 0) else - create_message("note", ckey, bannedby, "Banned for [minutes] minutes - [reason]", null, null, 0, 0) + create_message("note", key, bannedby, "Banned for [minutes] minutes - [reason]", null, null, 0, 0) return 1 /proc/RemoveBan(foldername) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 3e9c95573f..d280f5040e 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -29,7 +29,7 @@ body += "Options panel for [M]" if(M.client) body += " played by [M.client] " - body += "\[[M.client.holder ? M.client.holder.rank : "Player"]\]" + body += "\[[M.client.holder ? M.client.holder.rank : "Player"]\]" if(CONFIG_GET(flag/use_exp_tracking)) body += "\[" + M.client.get_exp_living() + "\]" @@ -834,7 +834,7 @@ continue if(message) to_chat(C, message) - kicked_client_names.Add("[C.ckey]") + kicked_client_names.Add("[C.key]") qdel(C) return kicked_client_names @@ -863,8 +863,8 @@ tomob.ghostize(0) - message_admins("[key_name_admin(usr)] has put [frommob.ckey] in control of [tomob.name].") - log_admin("[key_name(usr)] stuffed [frommob.ckey] into [tomob.name].") + message_admins("[key_name_admin(usr)] has put [frommob.key] in control of [tomob.name].") + log_admin("[key_name(usr)] stuffed [frommob.key] into [tomob.name].") SSblackbox.record_feedback("tally", "admin_verb", 1, "Ghost Drag Control") tomob.ckey = frommob.ckey diff --git a/code/modules/admin/permissionedit.dm b/code/modules/admin/permissionedit.dm index ac55eac872..c962aaac41 100644 --- a/code/modules/admin/permissionedit.dm +++ b/code/modules/admin/permissionedit.dm @@ -44,29 +44,29 @@ pagecount++ output += "|" var/limit = " LIMIT [logssperpage * page], [logssperpage]" - var/datum/DBQuery/query_search_admin_logs = SSdbcore.NewQuery("SELECT datetime, round_id, adminckey, operation, target, log FROM [format_table_name("admin_log")][search] ORDER BY datetime DESC[limit]") + var/datum/DBQuery/query_search_admin_logs = SSdbcore.NewQuery("SELECT datetime, round_id, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = adminckey), operation, IF(ckey IS NULL, target, byond_key), log FROM [format_table_name("admin_log")] LEFT JOIN [format_table_name("player")] ON target = ckey[search] ORDER BY datetime DESC[limit]") if(!query_search_admin_logs.warn_execute()) qdel(query_search_admin_logs) return while(query_search_admin_logs.NextRow()) var/datetime = query_search_admin_logs.item[1] var/round_id = query_search_admin_logs.item[2] - var/admin_ckey = query_search_admin_logs.item[3] + var/admin_key = query_search_admin_logs.item[3] operation = query_search_admin_logs.item[4] target = query_search_admin_logs.item[5] var/log = query_search_admin_logs.item[6] - output += "

[datetime] | Round ID [round_id] | Admin [admin_ckey] | Operation [operation] on [target]
[log]


" + output += "

[datetime] | Round ID [round_id] | Admin [admin_key] | Operation [operation] on [target]
[log]


" qdel(query_search_admin_logs) if(action == 2) output += "

Admin ckeys with invalid ranks

" - var/datum/DBQuery/query_check_admin_errors = SSdbcore.NewQuery("SELECT ckey, [format_table_name("admin")].rank FROM [format_table_name("admin")] LEFT JOIN [format_table_name("admin_ranks")] ON [format_table_name("admin_ranks")].rank = [format_table_name("admin")].rank WHERE [format_table_name("admin_ranks")].rank IS NULL") + var/datum/DBQuery/query_check_admin_errors = SSdbcore.NewQuery("SELECT (SELECT byond_key FROM [format_table_name("player")] WHERE [format_table_name("player")].ckey = [format_table_name("admin")].ckey), [format_table_name("admin")].rank FROM [format_table_name("admin")] LEFT JOIN [format_table_name("admin_ranks")] ON [format_table_name("admin_ranks")].rank = [format_table_name("admin")].rank WHERE [format_table_name("admin_ranks")].rank IS NULL") if(!query_check_admin_errors.warn_execute()) qdel(query_check_admin_errors) return while(query_check_admin_errors.NextRow()) - var/admin_ckey = query_check_admin_errors.item[1] + var/admin_key = query_check_admin_errors.item[1] var/admin_rank = query_check_admin_errors.item[2] - output += "[admin_ckey] has non-existent rank [admin_rank] | \[Change Rank\] | \[Remove\]" + output += "[admin_key] has non-existent rank [admin_rank] | \[Change Rank\] | \[Remove\]" output += "
" qdel(query_check_admin_errors) output += "

Unused ranks

" @@ -104,16 +104,18 @@ if (!D) continue var/deadminlink = "" + if(D.owner) + adm_ckey = D.owner.key if (D.deadmined) - deadminlink = " \[RA\]" + deadminlink = " \[RA\]" else - deadminlink = " \[DA\]" + deadminlink = " \[DA\]" output += "" - output += "[adm_ckey]
[deadminlink]\[-\]\[SYNC TGDB\]" - output += "[D.rank.name]" - output += "[rights2text(D.rank.include_rights," ")]" - output += "[rights2text(D.rank.exclude_rights," ", "-")]" - output += "[rights2text(D.rank.can_edit_rights," ", "*")]" + output += "[adm_ckey]
[deadminlink]\[-\]\[SYNC TGDB\]" + output += "[D.rank.name]" + output += "[rights2text(D.rank.include_rights," ")]" + output += "[rights2text(D.rank.exclude_rights," ", "-")]" + output += "[rights2text(D.rank.can_edit_rights," ", "*")]" output += "" output += "
Search:
" if(QDELETED(usr)) @@ -130,7 +132,8 @@ return var/datum/asset/permissions_assets = get_asset_datum(/datum/asset/simple/permissions) permissions_assets.send(src) - var/admin_ckey = ckey(href_list["ckey"]) + var/admin_key = href_list["key"] + var/admin_ckey = ckey(admin_key) var/datum/admins/D = GLOB.admin_datums[admin_ckey] var/use_db var/task = href_list["editrights"] @@ -172,38 +175,39 @@ if(!D) return if((task != "sync") && !check_if_greater_rights_than_holder(D)) - message_admins("[key_name_admin(usr)] attempted to change the rank of [admin_ckey] without sufficient rights.") - log_admin("[key_name(usr)] attempted to change the rank of [admin_ckey] without sufficient rights.") + message_admins("[key_name_admin(usr)] attempted to change the rank of [admin_key] without sufficient rights.") + log_admin("[key_name(usr)] attempted to change the rank of [admin_key] without sufficient rights.") return switch(task) if("add") - admin_ckey = add_admin(admin_ckey, use_db) + admin_ckey = add_admin(admin_ckey, admin_key, use_db) if(!admin_ckey) return - change_admin_rank(admin_ckey, use_db, null, legacy_only) + change_admin_rank(admin_ckey, admin_key, use_db, null, legacy_only) if("remove") - remove_admin(admin_ckey, use_db, D) + remove_admin(admin_ckey, admin_key, use_db, D) if("rank") - change_admin_rank(admin_ckey, use_db, D, legacy_only) + change_admin_rank(admin_ckey, admin_key, use_db, D, legacy_only) if("permissions") - change_admin_flags(admin_ckey, use_db, D, legacy_only) + change_admin_flags(admin_ckey, admin_key, use_db, D, legacy_only) if("activate") - force_readmin(admin_ckey, D) + force_readmin(admin_key, D) if("deactivate") - force_deadmin(admin_ckey, D) + force_deadmin(admin_key, D) if("sync") - sync_lastadminrank(admin_ckey, D) + sync_lastadminrank(admin_ckey, admin_key, D) edit_admin_permissions() -/datum/admins/proc/add_admin(admin_ckey, use_db) +/datum/admins/proc/add_admin(admin_ckey, admin_key, use_db) if(admin_ckey) . = admin_ckey else - . = ckey(input("New admin's ckey","Admin ckey") as text|null) + admin_key = input("New admin's key","Admin key") as text|null + . = ckey(admin_key) if(!.) return FALSE if(!admin_ckey && (. in GLOB.admin_datums+GLOB.deadmins)) - to_chat(usr, "[.] is already an admin.") + to_chat(usr, "[admin_key] is already an admin.") return FALSE if(use_db) . = sanitizeSQL(.) @@ -214,7 +218,7 @@ return FALSE if(query_admin_in_db.NextRow()) qdel(query_admin_in_db) - to_chat(usr, "[.] already listed in admin database. Check the Management tab if they don't appear in the list of admins.") + to_chat(usr, "[admin_key] already listed in admin database. Check the Management tab if they don't appear in the list of admins.") return FALSE qdel(query_admin_in_db) var/datum/DBQuery/query_add_admin = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin")] (ckey, rank) VALUES ('[.]', 'NEW ADMIN')") @@ -228,14 +232,14 @@ return FALSE qdel(query_add_admin_log) -/datum/admins/proc/remove_admin(admin_ckey, use_db, datum/admins/D) +/datum/admins/proc/remove_admin(admin_ckey, admin_key, use_db, datum/admins/D) if(alert("Are you sure you want to remove [admin_ckey]?","Confirm Removal","Do it","Cancel") == "Do it") GLOB.admin_datums -= admin_ckey GLOB.deadmins -= admin_ckey if(D) D.disassociate() - var/m1 = "[key_name_admin(usr)] removed [admin_ckey] from the admins list [use_db ? "permanently" : "temporarily"]" - var/m2 = "[key_name(usr)] removed [admin_ckey] from the admins list [use_db ? "permanently" : "temporarily"]" + var/m1 = "[key_name_admin(usr)] removed [admin_key] from the admins list [use_db ? "permanently" : "temporarily"]" + var/m2 = "[key_name(usr)] removed [admin_key] from the admins list [use_db ? "permanently" : "temporarily"]" if(use_db) var/datum/DBQuery/query_add_rank = SSdbcore.NewQuery("DELETE FROM [format_table_name("admin")] WHERE ckey = '[admin_ckey]'") if(!query_add_rank.warn_execute()) @@ -247,25 +251,25 @@ qdel(query_add_rank_log) return qdel(query_add_rank_log) - sync_lastadminrank(admin_ckey) + sync_lastadminrank(admin_ckey, admin_key) message_admins(m1) log_admin(m2) -/datum/admins/proc/force_readmin(admin_ckey, datum/admins/D) +/datum/admins/proc/force_readmin(admin_key, datum/admins/D) if(!D || !D.deadmined) return D.activate() - message_admins("[key_name_admin(usr)] forcefully readmined [admin_ckey]") - log_admin("[key_name(usr)] forcefully readmined [admin_ckey]") + message_admins("[key_name_admin(usr)] forcefully readmined [admin_key]") + log_admin("[key_name(usr)] forcefully readmined [admin_key]") -/datum/admins/proc/force_deadmin(admin_ckey, datum/admins/D) +/datum/admins/proc/force_deadmin(admin_key, datum/admins/D) if(!D || D.deadmined) return - message_admins("[key_name_admin(usr)] forcefully deadmined [admin_ckey]") - log_admin("[key_name(usr)] forcefully deadmined [admin_ckey]") + message_admins("[key_name_admin(usr)] forcefully deadmined [admin_key]") + log_admin("[key_name(usr)] forcefully deadmined [admin_key]") D.deactivate() //after logs so the deadmined admin can see the message. -/datum/admins/proc/change_admin_rank(admin_ckey, use_db, datum/admins/D, legacy_only) +/datum/admins/proc/change_admin_rank(admin_ckey, admin_key, use_db, datum/admins/D, legacy_only) var/datum/admin_rank/R var/list/rank_names = list() if(!use_db || (use_db && !legacy_only)) @@ -285,8 +289,8 @@ else R = new(new_rank) //blank new admin_rank GLOB.admin_ranks += R - var/m1 = "[key_name_admin(usr)] edited the admin rank of [admin_ckey] to [new_rank] [use_db ? "permanently" : "temporarily"]" - var/m2 = "[key_name(usr)] edited the admin rank of [admin_ckey] to [new_rank] [use_db ? "permanently" : "temporarily"]" + var/m1 = "[key_name_admin(usr)] edited the admin rank of [admin_key] to [new_rank] [use_db ? "permanently" : "temporarily"]" + var/m2 = "[key_name(usr)] edited the admin rank of [admin_key] to [new_rank] [use_db ? "permanently" : "temporarily"]" if(use_db) new_rank = sanitizeSQL(new_rank) //if a player was tempminned before having a permanent change made to their rank they won't yet be in the db @@ -296,7 +300,7 @@ qdel(query_admin_in_db) return if(!query_admin_in_db.NextRow()) - add_admin(admin_ckey, TRUE) + add_admin(admin_ckey, admin_key, TRUE) old_rank = "NEW ADMIN" else old_rank = query_admin_in_db.item[1] @@ -339,18 +343,18 @@ message_admins(m1) log_admin(m2) -/datum/admins/proc/change_admin_flags(admin_ckey, use_db, datum/admins/D, legacy_only) - var/new_flags = input_bitfield(usr, "Include permission flags
[use_db ? "This will affect ALL admins with this rank." : "This will affect only the current admin [admin_ckey]"]", "admin_flags", D.rank.include_rights, 350, 590, allowed_edit_list = usr.client.holder.rank.can_edit_rights) +/datum/admins/proc/change_admin_flags(admin_ckey, admin_key, use_db, datum/admins/D, legacy_only) + var/new_flags = input_bitfield(usr, "Include permission flags
[use_db ? "This will affect ALL admins with this rank." : "This will affect only the current admin [admin_key]"]", "admin_flags", D.rank.include_rights, 350, 590, allowed_edit_list = usr.client.holder.rank.can_edit_rights) if(isnull(new_flags)) return - var/new_exclude_flags = input_bitfield(usr, "Exclude permission flags
Flags enabled here will be removed from a rank.
Note these take precedence over included flags.
[use_db ? "This will affect ALL admins with this rank." : "This will affect only the current admin [admin_ckey]"]", "admin_flags", D.rank.exclude_rights, 350, 670, "red", usr.client.holder.rank.can_edit_rights) + var/new_exclude_flags = input_bitfield(usr, "Exclude permission flags
Flags enabled here will be removed from a rank.
Note these take precedence over included flags.
[use_db ? "This will affect ALL admins with this rank." : "This will affect only the current admin [admin_key]"]", "admin_flags", D.rank.exclude_rights, 350, 670, "red", usr.client.holder.rank.can_edit_rights) if(isnull(new_exclude_flags)) return - var/new_can_edit_flags = input_bitfield(usr, "Editable permission flags
These are the flags this rank is allowed to edit if they have access to the permissions panel.
They will be unable to modify admins to a rank that has a flag not included here.
[use_db ? "This will affect ALL admins with this rank." : "This will affect only the current admin [admin_ckey]"]", "admin_flags", D.rank.can_edit_rights, 350, 710, allowed_edit_list = usr.client.holder.rank.can_edit_rights) + var/new_can_edit_flags = input_bitfield(usr, "Editable permission flags
These are the flags this rank is allowed to edit if they have access to the permissions panel.
They will be unable to modify admins to a rank that has a flag not included here.
[use_db ? "This will affect ALL admins with this rank." : "This will affect only the current admin [admin_key]"]", "admin_flags", D.rank.can_edit_rights, 350, 710, allowed_edit_list = usr.client.holder.rank.can_edit_rights) if(isnull(new_can_edit_flags)) return - var/m1 = "[key_name_admin(usr)] edited the permissions of [use_db ? " rank [D.rank.name] permanently" : "[admin_ckey] temporarily"]" - var/m2 = "[key_name(usr)] edited the permissions of [use_db ? " rank [D.rank.name] permanently" : "[admin_ckey] temporarily"]" + var/m1 = "[key_name_admin(usr)] edited the permissions of [use_db ? " rank [D.rank.name] permanently" : "[admin_key] temporarily"]" + var/m2 = "[key_name(usr)] edited the permissions of [use_db ? " rank [D.rank.name] permanently" : "[admin_key] temporarily"]" if(use_db || legacy_only) var/old_flags var/old_exclude_flags @@ -446,7 +450,7 @@ message_admins(m1) log_admin(m2) -/datum/admins/proc/sync_lastadminrank(admin_ckey, datum/admins/D) +/datum/admins/proc/sync_lastadminrank(admin_ckey, admin_key, datum/admins/D) var/sqlrank = "Player" if (D) sqlrank = sanitizeSQL(D.rank.name) @@ -456,4 +460,4 @@ qdel(query_sync_lastadminrank) return qdel(query_sync_lastadminrank) - to_chat(usr, "Sync of [admin_ckey] successful.") + to_chat(usr, "Sync of [admin_key] successful.") diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index 7f2fa5b938..04dda31d48 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -1,28 +1,32 @@ -/proc/create_message(type, target_ckey, admin_ckey, text, timestamp, server, secret, logged = 1, browse) +/proc/create_message(type, target_key, admin_ckey, text, timestamp, server, secret, logged = 1, browse) if(!SSdbcore.Connect()) to_chat(usr, "Failed to establish database connection.") return if(!type) return - if(!target_ckey && (type == "note" || type == "message" || type == "watchlist entry")) - var/new_ckey = ckey(input(usr,"Who would you like to create a [type] for?","Enter a ckey",null) as null|text) - if(!new_ckey) + var/target_ckey + if(!target_key && (type == "note" || type == "message" || type == "watchlist entry")) + var/new_key = input(usr,"Who would you like to create a [type] for?","Enter a key or ckey",null) as null|text + if(!new_key) return - new_ckey = sanitizeSQL(new_ckey) + var/new_ckey = sanitizeSQL(ckey(new_key)) var/datum/DBQuery/query_find_ckey = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ckey = '[new_ckey]'") if(!query_find_ckey.warn_execute()) qdel(query_find_ckey) return if(!query_find_ckey.NextRow()) - if(alert(usr, "[new_ckey] has not been seen before, are you sure you want to create a [type] for them?", "Unknown ckey", "Yes", "No", "Cancel") != "Yes") + if(alert(usr, "[new_key]/([new_ckey]) has not been seen before, are you sure you want to create a [type] for them?", "Unknown ckey", "Yes", "No", "Cancel") != "Yes") qdel(query_find_ckey) return qdel(query_find_ckey) target_ckey = new_ckey + target_key = new_key if(QDELETED(usr)) return if(target_ckey) target_ckey = sanitizeSQL(target_ckey) + if(!target_key) + target_key = target_ckey if(!admin_ckey) admin_ckey = usr.ckey if(!admin_ckey) @@ -51,8 +55,8 @@ else return var/datum/DBQuery/query_create_message = SSdbcore.NewQuery("INSERT INTO [format_table_name("messages")] (type, targetckey, adminckey, text, timestamp, server, server_ip, server_port, round_id, secret) VALUES ('[type]', '[target_ckey]', '[admin_ckey]', '[text]', '[timestamp]', '[server]', INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]', '[GLOB.round_id]','[secret]')") - var/pm = "[key_name(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]: [text]" - var/header = "[key_name_admin(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]" + var/pm = "[key_name(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_key]" : ""]: [text]" + var/header = "[key_name_admin(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_key]" : ""]" if(!query_create_message.warn_execute()) qdel(query_create_message) return @@ -75,18 +79,18 @@ if(!message_id) return var/type - var/target_ckey + var/target_key var/text - var/m1 = "[key_name(usr)] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]: [text]" - var/m2 = "[key_name_admin(usr)] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]:
[text]" - var/datum/DBQuery/query_find_del_message = SSdbcore.NewQuery("SELECT type, targetckey, adminckey, text FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") + var/user_key_name = key_name(usr) + var/user_name_admin = key_name_admin(usr) + var/datum/DBQuery/query_find_del_message = SSdbcore.NewQuery("SELECT type, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey), text FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") if(!query_find_del_message.warn_execute()) qdel(query_find_del_message) return if(query_find_del_message.NextRow()) type = query_find_del_message.item[1] - target_ckey = query_find_del_message.item[2] - text = query_find_del_message.item[4] + target_key = query_find_del_message.item[2] + text = query_find_del_message.item[3] qdel(query_find_del_message) var/datum/DBQuery/query_del_message = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET deleted = 1 WHERE id = [message_id]") if(!query_del_message.warn_execute()) @@ -94,12 +98,14 @@ return qdel(query_del_message) if(logged) + var/m1 = "[user_key_name] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_key]: [text]" + var/m2 = "[user_name_admin] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_key]:
[text]" log_admin_private(m1) message_admins(m2) if(browse) browse_messages("[type]") else - browse_messages(target_ckey = target_ckey, agegate = TRUE) + browse_messages(target_ckey = ckey(target_key), agegate = TRUE) /proc/edit_message(message_id, browse) if(!SSdbcore.Connect()) @@ -108,32 +114,36 @@ message_id = text2num(message_id) if(!message_id) return - var/datum/DBQuery/query_find_edit_message = SSdbcore.NewQuery("SELECT type, targetckey, adminckey, text FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") + var/editor_ckey = sanitizeSQL(usr.ckey) + var/editor_key = sanitizeSQL(usr.key) + var/kn = key_name(usr) + var/kna = key_name_admin(usr) + var/datum/DBQuery/query_find_edit_message = SSdbcore.NewQuery("SELECT type, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey), (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = adminckey), text FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") if(!query_find_edit_message.warn_execute()) qdel(query_find_edit_message) return if(query_find_edit_message.NextRow()) var/type = query_find_edit_message.item[1] - var/target_ckey = query_find_edit_message.item[2] - var/admin_ckey = query_find_edit_message.item[3] + var/target_key = query_find_edit_message.item[2] + var/admin_key = query_find_edit_message.item[3] var/old_text = query_find_edit_message.item[4] - var/editor_ckey = sanitizeSQL(usr.ckey) var/new_text = input("Input new [type]", "New [type]", "[old_text]") as null|message if(!new_text) qdel(query_find_edit_message) return new_text = sanitizeSQL(new_text) - var/edit_text = sanitizeSQL("Edited by [editor_ckey] on [SQLtime()] from
[old_text]
to
[new_text]
") + var/edit_text = sanitizeSQL("Edited by [editor_key] on [SQLtime()] from
[old_text]
to
[new_text]
") var/datum/DBQuery/query_edit_message = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET text = '[new_text]', lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id] AND deleted = 0") if(!query_edit_message.warn_execute()) - qdel(query_find_edit_message) + qdel(query_edit_message) return - log_admin_private("[key_name(usr)] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""] made by [admin_ckey] from [old_text] to [new_text]") - message_admins("[key_name_admin(usr)] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""] made by [admin_ckey] from
[old_text]
to
[new_text]") + qdel(query_edit_message) + log_admin_private("[kn] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_key]" : ""] made by [admin_key] from [old_text] to [new_text]") + message_admins("[kna] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_key]" : ""] made by [admin_key] from
[old_text]
to
[new_text]") if(browse) browse_messages("[type]") else - browse_messages(target_ckey = target_ckey, agegate = TRUE) + browse_messages(target_ckey = ckey(target_key), agegate = TRUE) qdel(query_find_edit_message) /proc/toggle_message_secrecy(message_id) @@ -143,29 +153,29 @@ message_id = text2num(message_id) if(!message_id) return - var/editor_ckey = usr.ckey + var/editor_ckey = sanitizeSQL(usr.ckey) + var/editor_key = sanitizeSQL(usr.key) var/kn = key_name(usr) var/kna = key_name_admin(usr) - var/datum/DBQuery/query_find_message_secret = SSdbcore.NewQuery("SELECT type, targetckey, adminckey, secret FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") + var/datum/DBQuery/query_find_message_secret = SSdbcore.NewQuery("SELECT type, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey), (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = adminckey), secret FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") if(!query_find_message_secret.warn_execute()) qdel(query_find_message_secret) return if(query_find_message_secret.NextRow()) var/type = query_find_message_secret.item[1] - var/target_ckey = query_find_message_secret.item[2] - var/admin_ckey = query_find_message_secret.item[3] + var/target_key = query_find_message_secret.item[2] + var/admin_key = query_find_message_secret.item[3] var/secret = text2num(query_find_message_secret.item[4]) - editor_ckey = sanitizeSQL(editor_ckey) - var/edit_text = "Made [secret ? "not secret" : "secret"] by [editor_ckey] on [SQLtime()]
" + var/edit_text = "Made [secret ? "not secret" : "secret"] by [editor_key] on [SQLtime()]
" var/datum/DBQuery/query_message_secret = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET secret = NOT secret, lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id]") if(!query_message_secret.warn_execute()) qdel(query_find_message_secret) qdel(query_message_secret) return qdel(query_message_secret) - log_admin_private("[kn] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]") - message_admins("[kna] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]") - browse_messages(target_ckey = target_ckey, agegate = TRUE) + log_admin_private("[kn] has toggled [target_key]'s [type] made by [admin_key] to [secret ? "not secret" : "secret"]") + message_admins("[kna] has toggled [target_key]'s [type] made by [admin_key] to [secret ? "not secret" : "secret"]") + browse_messages(target_ckey = ckey(target_key), agegate = TRUE) qdel(query_find_message_secret) /proc/browse_messages(type, target_ckey, index, linkless = FALSE, filter, agegate = FALSE) @@ -197,7 +207,7 @@ else output += "|\[Filter offline clients\]" output += ruler - var/datum/DBQuery/query_get_type_messages = SSdbcore.NewQuery("SELECT id, targetckey, adminckey, text, timestamp, server, lasteditor FROM [format_table_name("messages")] WHERE type = '[type]' AND deleted = 0") + var/datum/DBQuery/query_get_type_messages = SSdbcore.NewQuery("SELECT id, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey), targetckey, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = adminckey), text, timestamp, server, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = lasteditor) FROM [format_table_name("messages")] WHERE type = '[type]' AND deleted = 0") if(!query_get_type_messages.warn_execute()) qdel(query_get_type_messages) return @@ -205,27 +215,29 @@ if(QDELETED(usr)) return var/id = query_get_type_messages.item[1] - var/t_ckey = query_get_type_messages.item[2] + var/t_key = query_get_type_messages.item[2] + var/t_ckey = query_get_type_messages.item[3] if(type == "watchlist entry" && filter && !(t_ckey in GLOB.directory)) continue - var/admin_ckey = query_get_type_messages.item[3] - var/text = query_get_type_messages.item[4] - var/timestamp = query_get_type_messages.item[5] - var/server = query_get_type_messages.item[6] - var/editor_ckey = query_get_type_messages.item[7] + var/admin_key = query_get_type_messages.item[4] + var/text = query_get_type_messages.item[5] + var/timestamp = query_get_type_messages.item[6] + var/server = query_get_type_messages.item[7] + var/editor_key = query_get_type_messages.item[8] output += "" if(type == "watchlist entry") - output += "[t_ckey] | " - output += "[timestamp] | [server] | [admin_ckey]" + output += "[t_key] | " + output += "[timestamp] | [server] | [admin_key]" output += " \[Delete\]" output += " \[Edit\]" - if(editor_ckey) - output += " Last edit by [editor_ckey] (Click here to see edit log)" + if(editor_key) + output += " Last edit by [editor_key] (Click here to see edit log)" output += "
[text]
" qdel(query_get_type_messages) if(target_ckey) target_ckey = sanitizeSQL(target_ckey) - var/datum/DBQuery/query_get_messages = SSdbcore.NewQuery("SELECT type, secret, id, adminckey, text, timestamp, server, lasteditor, DATEDIFF(NOW(), timestamp) AS `age` FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey = '[target_ckey]' AND deleted = 0 ORDER BY timestamp DESC") + var/target_key + var/datum/DBQuery/query_get_messages = SSdbcore.NewQuery("SELECT type, secret, id, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = adminckey), text, timestamp, server, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = lasteditor), DATEDIFF(NOW(), timestamp) AS `age`, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey) FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey = '[target_ckey]' AND deleted = 0 ORDER BY timestamp DESC") if(!query_get_messages.warn_execute()) qdel(query_get_messages) return @@ -243,12 +255,13 @@ if(linkless && secret) continue var/id = query_get_messages.item[3] - var/admin_ckey = query_get_messages.item[4] + var/admin_key = query_get_messages.item[4] var/text = query_get_messages.item[5] var/timestamp = query_get_messages.item[6] var/server = query_get_messages.item[7] - var/editor_ckey = query_get_messages.item[8] + var/editor_key = query_get_messages.item[8] var/age = text2num(query_get_messages.item[9]) + target_key = query_get_messages.item[10] var/alphatext = "" var/nsd = CONFIG_GET(number/note_stale_days) var/nfd = CONFIG_GET(number/note_fresh_days) @@ -263,19 +276,19 @@ skipped = TRUE alphatext = "filter: alpha(opacity=[alpha]); opacity: [alpha/100];" - var/list/data = list("

[timestamp] | [server] | [admin_ckey]") + var/list/data = list("

[timestamp] | [server] | [admin_key]") if(!linkless) data += " \[Delete\]" if(type == "note") data += " [secret ? "\[Secret\]" : "\[Not secret\]"]" if(type == "message sent") data += " Message has been sent" - if(editor_ckey) + if(editor_key) data += "|" else data += " \[Edit\]" - if(editor_ckey) - data += " Last edit by [editor_ckey] (Click here to see edit log)" + if(editor_key) + data += " Last edit by [editor_key] (Click here to see edit log)" data += "
[text]


" switch(type) if("message") @@ -287,11 +300,11 @@ if("note") notedata += data qdel(query_get_messages) - output += "

[target_ckey]

" + output += "

[target_key]

" if(!linkless) - output += "\[Add note\]" - output += " \[Add message\]" - output += " \[Add to watchlist\]" + output += "\[Add note\]" + output += " \[Add message\]" + output += " \[Add to watchlist\]" output += " \[Refresh page\]
" else output += " \[Refresh page\]
" @@ -315,7 +328,6 @@ else output += "
\[Hide Old\]
" if(index) - var/index_ckey var/search output += "
\[Add message\]\[Add watchlist entry\]\[Add note\]
" output += ruler @@ -328,15 +340,16 @@ search = "^\[^\[:alpha:\]\]" else search = "^[index]" - var/datum/DBQuery/query_list_messages = SSdbcore.NewQuery("SELECT DISTINCT targetckey FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey REGEXP '[search]' AND deleted = 0 ORDER BY targetckey") + var/datum/DBQuery/query_list_messages = SSdbcore.NewQuery("SELECT DISTINCT targetckey, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey) FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey REGEXP '[search]' AND deleted = 0 ORDER BY targetckey") if(!query_list_messages.warn_execute()) qdel(query_list_messages) return while(query_list_messages.NextRow()) if(QDELETED(usr)) return - index_ckey = query_list_messages.item[1] - output += "[index_ckey]
" + var/index_ckey = query_list_messages.item[1] + var/index_key = query_list_messages.item[2] + output += "[index_key]
" qdel(query_list_messages) else if(!type && !target_ckey && !index) output += "
\[Add message\]\[Add watchlist entry\]\[Add note\]
" @@ -352,7 +365,7 @@ var/output if(target_ckey) target_ckey = sanitizeSQL(target_ckey) - var/query = "SELECT id, adminckey, text, timestamp, lasteditor FROM [format_table_name("messages")] WHERE type = '[type]' AND deleted = 0" + var/query = "SELECT id, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = adminckey), text, timestamp, (SELECT byond_key FROM [format_table_name("player")] WHERE ckey = lasteditor) FROM [format_table_name("messages")] WHERE type = '[type]' AND deleted = 0" if(type == "message" || type == "watchlist entry") query += " AND targetckey = '[target_ckey]'" var/datum/DBQuery/query_get_message_output = SSdbcore.NewQuery(query) @@ -361,13 +374,13 @@ return while(query_get_message_output.NextRow()) var/message_id = query_get_message_output.item[1] - var/admin_ckey = query_get_message_output.item[2] + var/admin_key = query_get_message_output.item[2] var/text = query_get_message_output.item[3] var/timestamp = query_get_message_output.item[4] - var/editor_ckey = query_get_message_output.item[5] + var/editor_key = query_get_message_output.item[5] switch(type) if("message") - output += "Admin message left by [admin_ckey] on [timestamp]" + output += "Admin message left by [admin_key] on [timestamp]" output += "
[text]
" var/datum/DBQuery/query_message_read = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET type = 'message sent' WHERE id = [message_id]") if(!query_message_read.warn_execute()) @@ -379,9 +392,9 @@ message_admins("Notice: [key_name_admin(target_ckey)] has been on the watchlist since [timestamp] and has just connected - Reason: [text]") send2irc_adminless_only("Watchlist", "[key_name(target_ckey)] is on the watchlist and has just connected - Reason: [text]") if("memo") - output += "Memo by [admin_ckey] on [timestamp]" - if(editor_ckey) - output += "
Last edit by [editor_ckey] (Click here to see edit log)" + output += "Memo by [admin_key] on [timestamp]" + if(editor_key) + output += "
Last edit by [editor_key] (Click here to see edit log)" output += "
[text]

" qdel(query_get_message_output) return output diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 7cba469019..745328ab13 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -21,9 +21,9 @@ if(!CheckAdminHref(href, href_list)) return - + citaTopic(href, href_list) //CITADEL EDIT, MENTORS - + if(href_list["ahelp"]) if(!check_rights(R_ADMIN, TRUE)) return @@ -208,15 +208,14 @@ if(!check_rights(R_BAN)) return var/bantype = text2num(href_list["dbbanaddtype"]) - var/banckey = href_list["dbbanaddckey"] + var/bankey = href_list["dbbanaddkey"] + var/banckey = ckey(bankey) var/banip = href_list["dbbanaddip"] var/bancid = href_list["dbbanaddcid"] var/banduration = text2num(href_list["dbbaddduration"]) var/banjob = href_list["dbbanaddjob"] var/banreason = href_list["dbbanreason"] - banckey = ckey(banckey) - switch(bantype) if(BANTYPE_PERMA) if(!banckey || !banreason) @@ -266,12 +265,12 @@ if(bancid) banreason = "[banreason] (CUSTOM CID)" else - message_admins("Ban process: A mob matching [playermob.ckey] was found at location [playermob.x], [playermob.y], [playermob.z]. Custom ip and computer id fields replaced with the ip and computer id from the located mob.") + message_admins("Ban process: A mob matching [playermob.key] was found at location [playermob.x], [playermob.y], [playermob.z]. Custom ip and computer id fields replaced with the ip and computer id from the located mob.") - if(!DB_ban_record(bantype, playermob, banduration, banreason, banjob, banckey, banip, bancid )) + if(!DB_ban_record(bantype, playermob, banduration, banreason, banjob, bankey, banip, bancid )) to_chat(usr, "Failed to apply ban.") return - create_message("note", banckey, null, banreason, null, null, 0, 0) + create_message("note", bankey, null, banreason, null, null, 0, 0) else if(href_list["editrightsbrowser"]) edit_admin_permissions(0) @@ -281,9 +280,9 @@ if(href_list["editrightsbrowsermanage"]) if(href_list["editrightschange"]) - change_admin_rank(href_list["editrightschange"], TRUE) + change_admin_rank(ckey(href_list["editrightschange"]), href_list["editrightschange"], TRUE) else if(href_list["editrightsremove"]) - remove_admin(href_list["editrightsremove"], TRUE) + remove_admin(ckey(href_list["editrightsremove"]), href_list["editrightsremove"], TRUE) else if(href_list["editrightsremoverank"]) remove_rank(href_list["editrightsremoverank"]) edit_admin_permissions(2) @@ -593,9 +592,9 @@ if(M.client) jobban_buildcache(M.client) message_admins("[key_name_admin(usr)] removed [key_name_admin(M)]'s appearance ban.") - to_chat(M, "[usr.client.ckey] has removed your appearance ban.") + to_chat(M, "[usr.client.key] has removed your appearance ban.") - else switch(alert("Appearance ban [M.ckey]?",,"Yes","No", "Cancel")) + else switch(alert("Appearance ban [M.key]?",,"Yes","No", "Cancel")) if("Yes") var/reason = input(usr,"Please State Reason.","Reason") as message|null if(!reason) @@ -607,9 +606,9 @@ jobban_buildcache(M.client) ban_unban_log_save("[key_name(usr)] appearance banned [key_name(M)]. reason: [reason]") log_admin_private("[key_name(usr)] appearance banned [key_name(M)]. \nReason: [reason]") - create_message("note", M.ckey, null, "Appearance banned - [reason]", null, null, 0, 0) + create_message("note", M.key, null, "Appearance banned - [reason]", null, null, 0, 0) message_admins("[key_name_admin(usr)] appearance banned [key_name_admin(M)].") - to_chat(M, "You have been appearance banned by [usr.client.ckey].") + to_chat(M, "You have been appearance banned by [usr.client.key].") to_chat(M, "The reason is: [reason]") to_chat(M, "Appearance ban can be lifted only upon request.") var/bran = CONFIG_GET(string/banappeals) @@ -970,13 +969,13 @@ //Banning comes first if(notbannedlist.len) //at least 1 unbanned job exists in joblist so we have stuff to ban. - switch(alert("Temporary Ban for [M.ckey]?",,"Yes","No", "Cancel")) + switch(alert("Temporary Ban for [M.key]?",,"Yes","No", "Cancel")) if("Yes") var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null if(mins <= 0) to_chat(usr, "[mins] is not a valid duration.") return - var/reason = input(usr,"Please State Reason For Banning [M.ckey].","Reason") as message|null + var/reason = input(usr,"Please State Reason For Banning [M.key].","Reason") as message|null if(!reason) return @@ -993,15 +992,15 @@ msg = job else msg += ", [job]" - create_message("note", M.ckey, null, "Banned from [msg] - [reason]", null, null, 0, 0) + create_message("note", M.key, null, "Banned from [msg] - [reason]", null, null, 0, 0) message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes.") - to_chat(M, "You have been [(msg == ("ooc" || "appearance")) ? "banned" : "jobbanned"] by [usr.client.ckey] from: [msg].") + to_chat(M, "You have been [(msg == ("ooc" || "appearance")) ? "banned" : "jobbanned"] by [usr.client.key] from: [msg].") to_chat(M, "The reason is: [reason]") to_chat(M, "This jobban will be lifted in [mins] minutes.") href_list["jobban2"] = 1 // lets it fall through and refresh return 1 if("No") - var/reason = input(usr,"Please State Reason For Banning [M.ckey].","Reason") as message|null + var/reason = input(usr,"Please State Reason For Banning [M.key].","Reason") as message|null if(reason) var/msg for(var/job in notbannedlist) @@ -1016,9 +1015,9 @@ msg = job else msg += ", [job]" - create_message("note", M.ckey, null, "Banned from [msg] - [reason]", null, null, 0, 0) + create_message("note", M.key, null, "Banned from [msg] - [reason]", null, null, 0, 0) message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg].") - to_chat(M, "You have been [(msg == ("ooc" || "appearance")) ? "banned" : "jobbanned"] by [usr.client.ckey] from: [msg].") + to_chat(M, "You have been [(msg == ("ooc" || "appearance")) ? "banned" : "jobbanned"] by [usr.client.key] from: [msg].") to_chat(M, "The reason is: [reason]") to_chat(M, "Jobban can be lifted only upon request.") href_list["jobban2"] = 1 // lets it fall through and refresh @@ -1049,7 +1048,7 @@ continue if(msg) message_admins("[key_name_admin(usr)] unbanned [key_name_admin(M)] from [msg].") - to_chat(M, "You have been un-jobbanned by [usr.client.ckey] from [msg].") + to_chat(M, "You have been un-jobbanned by [usr.client.key] from [msg].") href_list["jobban2"] = 1 // lets it fall through and refresh return 1 return 0 //we didn't do anything! @@ -1070,7 +1069,7 @@ if(!M.client) to_chat(usr, "Error: [M] no longer has a client!") return - to_chat(M, "You have been kicked from the server by [usr.client.holder.fakekey ? "an Administrator" : "[usr.client.ckey]"].") + to_chat(M, "You have been kicked from the server by [usr.client.holder.fakekey ? "an Administrator" : "[usr.client.key]"].") log_admin("[key_name(usr)] kicked [key_name(M)].") message_admins("[key_name_admin(usr)] kicked [key_name_admin(M)].") qdel(M.client) @@ -1078,20 +1077,20 @@ else if(href_list["addmessage"]) if(!check_rights(R_ADMIN)) return - var/target_ckey = href_list["addmessage"] - create_message("message", target_ckey, secret = 0) + var/target_key = href_list["addmessage"] + create_message("message", target_key, secret = 0) else if(href_list["addnote"]) if(!check_rights(R_ADMIN)) return - var/target_ckey = href_list["addnote"] - create_message("note", target_ckey) + var/target_key = href_list["addnote"] + create_message("note", target_key) else if(href_list["addwatch"]) if(!check_rights(R_ADMIN)) return - var/target_ckey = href_list["addwatch"] - create_message("watchlist entry", target_ckey, secret = 1) + var/target_key = href_list["addwatch"] + create_message("watchlist entry", target_key, secret = 1) else if(href_list["addmemo"]) if(!check_rights(R_ADMIN)) @@ -1219,13 +1218,13 @@ if(M.client && M.client.holder) return //admins cannot be banned. Even if they could, the ban doesn't affect them anyway - switch(alert("Temporary Ban for [M.ckey]?",,"Yes","No", "Cancel")) + switch(alert("Temporary Ban for [M.key]?",,"Yes","No", "Cancel")) if("Yes") var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null if(mins <= 0) to_chat(usr, "[mins] is not a valid duration.") return - var/reason = input(usr,"Please State Reason For Banning [M.ckey].","Reason") as message|null + var/reason = input(usr,"Please State Reason For Banning [M.key].","Reason") as message|null if(!reason) return if(!DB_ban_record(BANTYPE_TEMP, M, mins, reason)) @@ -1233,14 +1232,14 @@ return AddBan(M.ckey, M.computer_id, reason, usr.ckey, 1, mins) ban_unban_log_save("[key_name(usr)] has banned [key_name(M)]. - Reason: [reason] - This will be removed in [mins] minutes.") - to_chat(M, "You have been banned by [usr.client.ckey].\nReason: [reason]") + to_chat(M, "You have been banned by [usr.client.key].\nReason: [reason]") to_chat(M, "This is a temporary ban, it will be removed in [mins] minutes. The round ID is [GLOB.round_id].") var/bran = CONFIG_GET(string/banappeals) if(bran) to_chat(M, "To try to resolve this matter head to [bran]") else to_chat(M, "No ban appeals URL has been set.") - log_admin_private("[key_name(usr)] has banned [M.ckey].\nReason: [key_name(M)]\nThis will be removed in [mins] minutes.") + log_admin_private("[key_name(usr)] has banned [key_name(M)].\nReason: [key_name(M)]\nThis will be removed in [mins] minutes.") var/msg = "[key_name_admin(usr)] has banned [key_name_admin(M)].\nReason: [reason]\nThis will be removed in [mins] minutes." message_admins(msg) var/datum/admin_help/AH = M.client ? M.client.current_ticket : null @@ -1248,7 +1247,7 @@ AH.Resolve() qdel(M.client) if("No") - var/reason = input(usr,"Please State Reason For Banning [M.ckey].","Reason") as message|null + var/reason = input(usr,"Please State Reason For Banning [M.key].","Reason") as message|null if(!reason) return switch(alert(usr,"IP ban?",,"Yes","No","Cancel")) @@ -1258,7 +1257,7 @@ AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0, M.lastKnownIP) if("No") AddBan(M.ckey, M.computer_id, reason, usr.ckey, 0, 0) - to_chat(M, "You have been banned by [usr.client.ckey].\nReason: [reason]") + to_chat(M, "You have been banned by [usr.client.key].\nReason: [reason]") to_chat(M, "This is a permanent ban. The round ID is [GLOB.round_id].") var/bran = CONFIG_GET(string/banappeals) if(bran) @@ -2351,7 +2350,7 @@ if(alert("Are you sure you want to kick all [afkonly ? "AFK" : ""] clients from the lobby??","Message","Yes","Cancel") != "Yes") to_chat(usr, "Kick clients from lobby aborted") return - var/list/listkicked = kick_clients_in_lobby("You were kicked from the lobby by [usr.client.holder.fakekey ? "an Administrator" : "[usr.client.ckey]"].", afkonly) + var/list/listkicked = kick_clients_in_lobby("You were kicked from the lobby by [usr.client.holder.fakekey ? "an Administrator" : "[usr.client.key]"].", afkonly) var/strkicked = "" for(var/name in listkicked) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 54af4b5167..68aafde8b0 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -21,12 +21,13 @@ /client/proc/SDQL2_query(query_text as message) set category = "Debug" if(!check_rights(R_DEBUG)) //Shouldn't happen... but just to be safe. - message_admins("ERROR: Non-admin [key_name(usr, usr.client)] attempted to execute a SDQL query!") - log_admin("Non-admin [usr.ckey]([usr]) attempted to execute a SDQL query!") + message_admins("ERROR: Non-admin [key_name(usr)] attempted to execute a SDQL query!") + log_admin("Non-admin [key_name(usr)] attempted to execute a SDQL query!") return FALSE - var/list/results = world.SDQL2_query(query_text, key_name_admin(usr), "[usr.ckey]([usr])") + var/list/results = world.SDQL2_query(query_text, key_name_admin(usr), "[key_name(usr)]") for(var/I in 1 to 3) to_chat(usr, results[I]) + SSblackbox.record_feedback("nested tally", "SDQL query", 1, list(ckey, query_text)) /world/proc/SDQL2_query(query_text, log_entry1, log_entry2) var/query_log = "executed SDQL query: \"[query_text]\"." diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index bef39c29ca..03d58c8e90 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -398,7 +398,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) message_admins(msg) log_admin_private(msg) AddInteraction("Being handled by [key_name]") - + //Show the ticket panel /datum/admin_help/proc/TicketPanel() var/list/dat = list("Ticket #[id]") @@ -686,7 +686,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) var/is_antag = 0 if(found.mind && found.mind.special_role) is_antag = 1 - founds += "Name: [found.name]([found.real_name]) Ckey: [found.ckey] [is_antag ? "(Antag)" : null] " + founds += "Name: [found.name]([found.real_name]) Ckey: [found.key] [is_antag ? "(Antag)" : null] " msg += "[original_word](?|F) " continue msg += "[original_word] " diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index d34e1ebd42..4ba3c94711 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -494,7 +494,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) set desc = "Direct intervention" if(M.ckey) - if(alert("This mob is being controlled by [M.ckey]. Are you sure you wish to assume control of it? [M.ckey] will be made a ghost.",,"Yes","No") != "Yes") + if(alert("This mob is being controlled by [M.key]. Are you sure you wish to assume control of it? [M.key] will be made a ghost.",,"Yes","No") != "Yes") return else var/mob/dead/observer/ghost = new/mob/dead/observer(M,1) diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 8c8b599862..f2df21c988 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -264,9 +264,9 @@ GLOBAL_VAR_INIT(say_disabled, FALSE) GLOB.say_disabled = !GLOB.say_disabled if(GLOB.say_disabled) - message_admins("[src.ckey] used 'Disable all communication verbs', killing all communication methods.") + message_admins("[key] used 'Disable all communication verbs', killing all communication methods.") else - message_admins("[src.ckey] used 'Disable all communication verbs', restoring all communication methods.") + message_admins("[key] used 'Disable all communication verbs', restoring all communication methods.") //This generates the icon states for job starting location landmarks. /client/proc/create_mapping_job_icons() diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm index 6780f23677..51b0be95b6 100644 --- a/code/modules/assembly/doorcontrol.dm +++ b/code/modules/assembly/doorcontrol.dm @@ -55,7 +55,7 @@ if(specialfunctions & SHOCK) if(D.secondsElectrified) D.secondsElectrified = -1 - LAZYADD(D.shockedby, "\[[time_stamp()]\][usr](ckey:[usr.ckey])") + LAZYADD(D.shockedby, "\[[time_stamp()]\] [key_name(usr)]") add_logs(usr, D, "electrified") else D.secondsElectrified = 0 diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 5399aa375e..60a1f6c589 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -360,6 +360,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) send2irc_adminless_only("new_byond_user", "[key_name(src)] (IP: [address], ID: [computer_id]) is a new BYOND account [account_age] day[(account_age==1?"":"s")] old, created on [account_join_date].") get_message_output("watchlist entry", ckey) check_ip_intel() + validate_key_in_db() send_resources() @@ -507,7 +508,8 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) new_player = 1 account_join_date = sanitizeSQL(findJoinDate()) - var/datum/DBQuery/query_add_player = SSdbcore.NewQuery("INSERT INTO [format_table_name("player")] (`ckey`, `firstseen`, `firstseen_round_id`, `lastseen`, `lastseen_round_id`, `ip`, `computerid`, `lastadminrank`, `accountjoindate`) VALUES ('[sql_ckey]', Now(), '[GLOB.round_id]', Now(), '[GLOB.round_id]', INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]', [account_join_date ? "'[account_join_date]'" : "NULL"])") + var/sql_key = sanitizeSQL(key) + var/datum/DBQuery/query_add_player = SSdbcore.NewQuery("INSERT INTO [format_table_name("player")] (`ckey`, `byond_key`, `firstseen`, `firstseen_round_id`, `lastseen`, `lastseen_round_id`, `ip`, `computerid`, `lastadminrank`, `accountjoindate`) VALUES ('[sql_ckey]', '[sql_key]', Now(), '[GLOB.round_id]', Now(), '[GLOB.round_id]', INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]', [account_join_date ? "'[account_join_date]'" : "NULL"])") if(!query_add_player.Execute()) qdel(query_client_in_db) qdel(query_add_player) @@ -558,7 +560,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) /client/proc/findJoinDate() var/list/http = world.Export("http://byond.com/members/[ckey]?format=text") if(!http) - log_world("Failed to connect to byond age check for [ckey]") + log_world("Failed to connect to byond member page to age check [ckey]") return var/F = file2text(http["CONTENT"]) if(F) @@ -568,6 +570,33 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) else CRASH("Age check regex failed for [src.ckey]") +/client/proc/validate_key_in_db() + var/sql_ckey = sanitizeSQL(ckey) + var/sql_key + var/datum/DBQuery/query_check_byond_key = SSdbcore.NewQuery("SELECT byond_key FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'") + if(!query_check_byond_key.Execute()) + qdel(query_check_byond_key) + return + if(query_check_byond_key.NextRow()) + sql_key = query_check_byond_key.item[1] + qdel(query_check_byond_key) + if(key != sql_key) + var/list/http = world.Export("http://byond.com/members/[ckey]?format=text") + if(!http) + log_world("Failed to connect to byond member page to get changed key for [ckey]") + return + var/F = file2text(http["CONTENT"]) + if(F) + var/regex/R = regex("\\tkey = \"(.+)\"") + if(R.Find(F)) + var/web_key = sanitizeSQL(R.group[1]) + var/datum/DBQuery/query_update_byond_key = SSdbcore.NewQuery("UPDATE [format_table_name("player")] SET byond_key = '[web_key]' WHERE ckey = '[sql_ckey]'") + query_update_byond_key.Execute() + qdel(query_update_byond_key) + else + CRASH("Key check regex failed for [ckey]") + + /client/proc/check_randomizer(topic) . = FALSE if (connection != "seeker") @@ -676,7 +705,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) qdel(query_get_notes) return qdel(query_get_notes) - create_message("note", ckey, system_ckey, message, null, null, 0, 0) + create_message("note", key, system_ckey, message, null, null, 0, 0) /client/proc/check_ip_intel() diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 088c75a1b5..239a574d94 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -372,7 +372,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" - + if(CONFIG_GET(flag/join_with_mutant_humans)) @@ -525,7 +525,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) else dat += "Be [capitalize(i)]: [(i in be_special) ? "Yes" : "No"]
" dat += "
" - dat += "

Citadel Preferences

" //Because fuck me if preferences can't be fucking modularized and expected to update in a reasonable timeframe. + dat += "

Citadel Preferences

" //Because fuck me if preferences can't be fucking modularized and expected to update in a reasonable timeframe. dat += "Arousal:[arousable == TRUE ? "Enabled" : "Disabled"]
" dat += "Exhibitionist:[features["exhibitionist"] == TRUE ? "Yes" : "No"]
" dat += "Allow MediHound sleeper: [(cit_toggles & MEDIHOUND_SLEEPER) ? "Yes" : "No"]
" @@ -939,7 +939,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(href_list["jobbancheck"]) var/job = sanitizeSQL(href_list["jobbancheck"]) var/sql_ckey = sanitizeSQL(user.ckey) - var/datum/DBQuery/query_get_jobban = SSdbcore.NewQuery("SELECT reason, bantime, duration, expiration_time, a_ckey FROM [format_table_name("ban")] WHERE ckey = '[sql_ckey]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[job]'") + var/datum/DBQuery/query_get_jobban = SSdbcore.NewQuery("SELECT reason, bantime, duration, expiration_time, (SELECT byond_key FROM [format_table_name("player")] WHERE [format_table_name("player")].ckey = [format_table_name("ban")].a_ckey) FROM [format_table_name("ban")] WHERE ckey = '[sql_ckey]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[job]'") if(!query_get_jobban.warn_execute()) return if(query_get_jobban.NextRow()) @@ -947,9 +947,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/bantime = query_get_jobban.item[2] var/duration = query_get_jobban.item[3] var/expiration_time = query_get_jobban.item[4] - var/a_ckey = query_get_jobban.item[5] + var/admin_key = query_get_jobban.item[5] var/text - text = "You, or another user of this computer, ([user.ckey]) is banned from playing [job]. The ban reason is:
[reason]
This ban was applied by [a_ckey] on [bantime]" + text = "You, or another user of this computer, ([user.key]) is banned from playing [job]. The ban reason is:
[reason]
This ban was applied by [admin_key] on [bantime]" if(text2num(duration) > 0) text += ". The ban is for [duration] minutes and expires on [expiration_time] (server time)" text += ".
" @@ -1223,7 +1223,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/new_tail new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in GLOB.tails_list_human if(new_tail) - features["tail_human"] = new_tail + features["tail_human"] = new_tail if("snout") var/new_snout @@ -1413,9 +1413,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("balls_internal") features["balls_internal"] = !features["balls_internal"] if("eggsack_internal") - features["eggsack_internal"] = !features["eggsack_internal"] + features["eggsack_internal"] = !features["eggsack_internal"] if("has_breasts") - features["has_breasts"] = !features["has_breasts"] + features["has_breasts"] = !features["has_breasts"] if("has_vag") features["has_vag"] = !features["has_vag"] if("has_womb") diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 81e296e4c8..70ee897b29 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -422,8 +422,9 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums var/sqlauthor = sanitizeSQL(scanner.cache.author) var/sqlcontent = sanitizeSQL(scanner.cache.dat) var/sqlcategory = sanitizeSQL(upload_category) + var/sqlckey = sanitizeSQL(usr.ckey) var/msg = "[key_name(usr)] has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs" - var/datum/DBQuery/query_library_upload = SSdbcore.NewQuery("INSERT INTO [format_table_name("library")] (author, title, content, category, ckey, datetime, round_id_created) VALUES ('[sqlauthor]', '[sqltitle]', '[sqlcontent]', '[sqlcategory]', '[usr.ckey]', Now(), '[GLOB.round_id]')") + var/datum/DBQuery/query_library_upload = SSdbcore.NewQuery("INSERT INTO [format_table_name("library")] (author, title, content, category, ckey, datetime, round_id_created) VALUES ('[sqlauthor]', '[sqltitle]', '[sqlcontent]',, '[sqlckey]', Now(), '[GLOB.round_id]')") if(!query_library_upload.Execute()) qdel(query_library_upload) alert("Database error encountered uploading to Archive") diff --git a/code/modules/mob/dead/new_player/poll.dm b/code/modules/mob/dead/new_player/poll.dm index 388f63961b..5ac1b4adb5 100644 --- a/code/modules/mob/dead/new_player/poll.dm +++ b/code/modules/mob/dead/new_player/poll.dm @@ -375,9 +375,9 @@ if (!usr || !src) return 0 //we gots ourselfs a dirty cheater on our hands! - log_game("[key_name(usr)] attempted to rig the vote by voting as [ckey]") - message_admins("[key_name_admin(usr)] attempted to rig the vote by voting as [ckey]") - to_chat(usr, "You don't seem to be [ckey].") + log_game("[key_name(usr)] attempted to rig the vote by voting as [key]") + message_admins("[key_name_admin(usr)] attempted to rig the vote by voting as [key]") + to_chat(usr, "You don't seem to be [key].") to_chat(src, "Something went horribly wrong processing your vote. Please contact an administrator, they should have gotten a message about this") return 0 return 1 @@ -579,7 +579,7 @@ return 1 var/i if(query_multi_choicelen.NextRow()) - i = text2num(query_multi_choicelen.item[1]) + i = text2num(query_multi_choicelen.item[1]) qdel(query_multi_choicelen) var/datum/DBQuery/query_multi_hasvoted = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_multi_hasvoted.warn_execute()) diff --git a/code/modules/projectiles/guns/misc/blastcannon.dm b/code/modules/projectiles/guns/misc/blastcannon.dm index df1f9fdfbd..6c685ebe89 100644 --- a/code/modules/projectiles/guns/misc/blastcannon.dm +++ b/code/modules/projectiles/guns/misc/blastcannon.dm @@ -102,9 +102,8 @@ playsound(user, "explosion", 100, 1) var/turf/starting = get_turf(user) var/turf/targturf = get_turf(target) - var/log_str = "Blast wave fired from [ADMIN_VERBOSEJMP(starting)] ([get_area_name(user, TRUE)]) at [ADMIN_VERBOSEJMP(targturf)] ([target.name]) by [user.name]([user.ckey]) with power [heavy]/[medium]/[light]." - message_admins(log_str) - log_game(log_str) + message_admins("Blast wave fired from [ADMIN_VERBOSEJMP(starting)] at [ADMIN_VERBOSEJMP(targturf)] ([target.name]) by [key_name_admin(user)] with power [heavy]/[medium]/[light].") + log_game("Blast wave fired from [AREACOORD(starting)] at [AREACOORD(targturf)] ([target.name]) by [key_name(user)] with power [heavy]/[medium]/[light].") var/obj/item/projectile/blastwave/BW = new(loc, heavy, medium, light) BW.hugbox = hugbox BW.preparePixelProjectile(target, get_turf(src), params, 0) @@ -158,4 +157,4 @@ lightr = max(lightr - 1, 0) /obj/item/projectile/blastwave/ex_act() - return \ No newline at end of file + return diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 2159302ce9..64ef740278 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -142,7 +142,7 @@ if(L != user) add_logs(user, L, "injected", src, addition="which had [contained]") else - log_attack("[user.name] ([user.ckey]) injected [L.name] ([L.ckey]) with [src.name], which had [contained] (INTENT: [uppertext(user.a_intent)])") + log_attack("[key_name(user)] injected [key_name(L)] with [src.name], which had [contained] (INTENT: [uppertext(user.a_intent)])") L.log_message("Injected themselves ([contained]) with [src.name].", INDIVIDUAL_ATTACK_LOG) var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1)