diff --git a/SQL/admin_import_2018-02-03.py b/SQL/admin_import_2018-02-03.py index 6bd8892b5e27e..b9ce28cef1712 100644 --- a/SQL/admin_import_2018-02-03.py +++ b/SQL/admin_import_2018-02-03.py @@ -93,7 +93,7 @@ def parse_text_flags(text, previous): matches = re.match("(.+)\\b\\s+=\\s+(.+)", line) ckey = "".join((c for c in matches.group(1) if c not in ckeyformat)).lower() rank = "".join((c for c in matches.group(2) if c not in ckeyExformat)) - cursor.execute("INSERT INTO {0} (ckey, rank) VALUES ('{1}', '{2}')".format(admin_table, ckey, rank)) + cursor.execute("INSERT INTO {0} (ckey, rank) VALUES ('{1}', '{2}')".format(admin_table, ckey, rank)) db.commit() cursor.close() print("Import complete.") diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.txt index d3339df1fb842..fc93bb8fec339 100644 --- a/SQL/database_changelog.txt +++ b/SQL/database_changelog.txt @@ -1,15 +1,23 @@ Any time you make a change to the schema files, remember to increment the database schema version. Generally increment the minor number, major should be reserved for significant changes to the schema. Both values go up to 255. -The latest database version is 4.4; The query to update the schema revision table is: +The latest database version is 4.5; The query to update the schema revision table is: -INSERT INTO `schema_revision` (`major`, `minor`) VALUES (4, 4); +INSERT INTO `schema_revision` (`major`, `minor`) VALUES (4, 5); or -INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (4, 4); +INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (4, 5); In any query remember to add a prefix to the table names if you use one. ---------------------------------------------------- +Version 4.5, 9 July 2018, by Jordie0608 +Modified table `player`, adding column `byond_key` to store a user's key along with their ckey. +To populate this new column run the included script 'populate_key_2018-07', see the file for use instructions. + +ALTER TABLE `player` ADD `byond_key` VARCHAR(32) DEFAULT NULL AFTER `ckey`; + +---------------------------------------------------- + Version 4.4, 9 May 2018, by Jordie0608 Modified table `round`, renaming column `start_datetime` to `initialize_datetime` and `end_datetime` to `shutdown_datetime` and adding columns to replace both under the same name in preparation for changes to TGS server initialization. diff --git a/SQL/populate_key_2018-07-09.py b/SQL/populate_key_2018-07-09.py new file mode 100644 index 0000000000000..82e7a3f4af0c2 --- /dev/null +++ b/SQL/populate_key_2018-07-09.py @@ -0,0 +1,92 @@ +#Python 3+ Script for populating the key of all ckeys in player table made by Jordie0608 +# +#Before starting ensure you have installed the mysqlclient package https://github.com/PyMySQL/mysqlclient-python +#It can be downloaded from command line with pip: +#pip install mysqlclient +#And that you have run the most recent commands listed in database_changelog.txt +# +#To view the parameters for this script, execute it with the argument --help +#All the positional arguments are required, remember to include a prefixe in your table name if you use one +#--useckey and --onlynull are optional arguments, see --help for their function +#An example of the command used to execute this script from powershell: +#python populate_key_2018-07-09.py "localhost" "root" "password" "feedback" "SS13_player" --onlynull --useckey +# +#This script requires an internet connection to function +#Sometimes byond.com fails to return the page for a valid ckey, this can be a temporary problem and may be resolved by rerunning the script +#You can have the script use the existing ckey instead if the key is unable to be parsed with the --useckey optional argument +#To make the script only iterate on rows that failed to parse a ckey and have a null byond_key column, use the --onlynull optional argument +#To make the script only iterate on rows that have a matching ckey and byond_key column, use the --onlyckeymatch optional argument +#The --onlynull and --onlyckeymatch arguments are mutually exclusive, the script can't be run with both of them enabled +# +#It's safe to run this script with your game server(s) active. + +import MySQLdb +import argparse +import re +import sys +from urllib.request import urlopen +from datetime import datetime + +if sys.version_info[0] < 3: + raise Exception("Python must be at least version 3 for this script.") +query_values = "" +current_round = 0 +parser = argparse.ArgumentParser() +parser.add_argument("address", help="MySQL server address (use localhost for the current computer)") +parser.add_argument("username", help="MySQL login username") +parser.add_argument("password", help="MySQL login password") +parser.add_argument("database", help="Database name") +parser.add_argument("playertable", help="Name of the player table (remember a prefix if you use one)") +parser.add_argument("--useckey", help="Use the player's ckey for their key if unable to contact or parse their member page", action="store_true") +group = parser.add_mutually_exclusive_group() +group.add_argument("--onlynull", help="Only try to update rows if their byond_key column is null, mutually exclusive with --onlyckeymatch", action="store_true") +group.add_argument("--onlyckeymatch", help="Only try to update rows that have matching ckey and byond_key columns from the --useckey argument, mutually exclusive with --onlynull", action="store_true") +args = parser.parse_args() +where = "" +if args.onlynull: + where = " WHERE byond_key IS NULL" +if args.onlyckeymatch: + where = " WHERE byond_key = ckey" +db=MySQLdb.connect(host=args.address, user=args.username, passwd=args.password, db=args.database) +cursor=db.cursor() +player_table = args.playertable +cursor.execute("SELECT ckey FROM {0}{1}".format(player_table, where)) +ckey_list = cursor.fetchall() +failed_ckeys = [] +start_time = datetime.now() +success = 0 +fail = 0 +print("Beginning script at {0}".format(start_time.strftime("%Y-%m-%d %H:%M:%S"))) +if not ckey_list: + print("Query returned no rows") +for current_ckey in ckey_list: + link = urlopen("https://secure.byond.com/members/{0}/?format=text".format(current_ckey[0])) + data = link.read() + data = data.decode("ISO-8859-1") + match = re.search("\tkey = \"(.+)\"", data) + if match: + key = match.group(1) + success += 1 + else: + fail += 1 + failed_ckeys.append(current_ckey[0]) + msg = "Failed to parse a key for {0}".format(current_ckey[0]) + if args.useckey: + msg += ", using their ckey instead" + print(msg) + key = current_ckey[0] + else: + print(msg) + continue + cursor.execute("UPDATE {0} SET byond_key = \'{1}\' WHERE ckey = \'{2}\'".format(player_table, key, current_ckey[0])) + db.commit() +end_time = datetime.now() +print("Script completed at {0} with duration {1}".format(datetime.now().strftime("%Y-%m-%d %H:%M:%S"), end_time - start_time)) +if failed_ckeys: + if args.useckey: + print("The following ckeys failed to parse a key so their ckey was used instead:") + else: + print("The following ckeys failed to parse a key and were skipped:") + print("\n".join(failed_ckeys)) + print("Keys successfully parsed: {0} Keys failed parsing: {1}".format(success, fail)) +cursor.close() diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql index dad9f1e766a93..480ad58ff4ee8 100644 --- a/SQL/tgstation_schema.sql +++ b/SQL/tgstation_schema.sql @@ -309,6 +309,7 @@ DROP TABLE IF EXISTS `player`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `player` ( `ckey` varchar(32) NOT NULL, + `byond_key` varchar(32) DEFAULT NULL, `firstseen` datetime NOT NULL, `firstseen_round_id` int(11) unsigned NOT NULL, `lastseen` datetime NOT NULL, diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql index 8c9b15e8941f7..2842ee9122480 100644 --- a/SQL/tgstation_schema_prefixed.sql +++ b/SQL/tgstation_schema_prefixed.sql @@ -309,6 +309,7 @@ DROP TABLE IF EXISTS `SS13_player`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `SS13_player` ( `ckey` varchar(32) NOT NULL, + `byond_key` varchar(32) DEFAULT NULL, `firstseen` datetime NOT NULL, `firstseen_round_id` int(11) unsigned NOT NULL, `lastseen` datetime NOT NULL, diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index c2ffd3319698a..0317b5ba7f156 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 24b6233c598c8..30fcf6b151e56 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -192,15 +192,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 21366978f662e..6dafb2c3cb9ac 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]!") diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm index 337926ce6b3e6..ba39845d61a8e 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 c08239af30a85..e6f79c67b0ac1 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 2a853f92881d6..2b610cebee5de 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -435,23 +435,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 166da28435442..1c1944e73ee9f 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 03eeb76632ba5..5e5db86780bc2 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 a247f4c125c74..111ce3ccca301 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 fd95783525eb4..ceabbb0734237 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 dc38e2dca9242..7d9e50d07014b 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") @@ -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)") + 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 1e092a16e98e0..d81d037c50e79 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 42740b32c8672..b1353ac0362b3 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() + "\]" @@ -827,7 +827,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 @@ -856,8 +856,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 ac55eac872fd9..c962aaac41cb5 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 bdc92649ffe62..04dda31d48bff 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/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, targetckey, adminckey, text FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") + 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,14 +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_ckey]: [text]" - var/m2 = "[user_name_admin] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]:
[text]" + 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()) @@ -110,33 +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_edit_message) return qdel(query_edit_message) - 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]") + 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) @@ -146,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) @@ -200,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 @@ -208,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 @@ -246,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) @@ -266,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") @@ -290,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\]
" @@ -318,7 +328,6 @@ else output += "
\[Hide Old\]
" if(index) - var/index_ckey var/search output += "
\[Add message\]\[Add watchlist entry\]\[Add note\]
" output += ruler @@ -331,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\]
" @@ -355,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) @@ -364,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()) @@ -382,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 b0dd821afaa2a..378cf7a70190e 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -206,15 +206,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) @@ -264,12 +263,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) @@ -279,9 +278,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) @@ -591,9 +590,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) @@ -605,9 +604,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) @@ -968,13 +967,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 @@ -991,15 +990,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) @@ -1014,9 +1013,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 @@ -1047,7 +1046,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! @@ -1068,7 +1067,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) @@ -1076,20 +1075,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)) @@ -1217,13 +1216,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)) @@ -1231,14 +1230,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 @@ -1246,7 +1245,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")) @@ -1256,7 +1255,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) @@ -2349,7 +2348,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 b76fae94f8032..603e4daf2d3bd 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -21,10 +21,10 @@ /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)) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index a71e0edc98214..572e685e1c65a 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -667,7 +667,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]) Key: [found.key] Ckey: [found.ckey] [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 aedda8c5da549..8700870470506 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 899c0a39337c3..8559a3235e0ad 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -265,9 +265,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 6780f23677eaa..51b0be95b64ac 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 626b5eb699863..50595e7468d0d 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -339,6 +339,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() @@ -484,7 +485,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) @@ -535,7 +537,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) @@ -545,6 +547,32 @@ 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") @@ -653,7 +681,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 56dfe5e6a110d..2291d5964644b 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -937,7 +937,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()) qdel(query_get_jobban) return @@ -946,9 +946,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 += ".
" diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index dfc917984a6cb..8ae63a8a76899 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -423,8 +423,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]', '[sqlcategory]', '[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 388f63961bb7c..5ac1b4adb508e 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 df1f9fdfbd0a2..6c685ebe89abb 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 0ba781d96247d..1092e63376c59 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -143,7 +143,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)