diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
index adbee2238af..b4015ed5b8d 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm
@@ -367,6 +367,20 @@
v = object
else if(expression[start] == "usr")
v = usr
+ else if(expression[start] == "marked")
+ if(usr.client && usr.client.holder && usr.client.holder.marked_datum)
+ v = usr.client.holder.marked_datum
+ else
+ return null
+ else if(expression[start] == "\[" && start < expression.len)
+ if(lowertext(copytext(expression[start + 1], 1, 3)) != "0x")
+ usr << "Invalid ref syntax: [expression[start + 1]]"
+ return null
+ v = locate("\[[expression[start + 1]]\]")
+ if(!v)
+ usr << "Invalid ref: [expression[start + 1]]"
+ return null
+ start++
else
return null
@@ -378,7 +392,7 @@
/proc/SDQL2_tokenize(query_text)
var/list/whitespace = list(" ", "\n", "\t")
- var/list/single = list("(", ")", ",", "+", "-", ".", ";")
+ var/list/single = list("(", ")", ",", "+", "-", ".", ";", "\[", "\]")
var/list/multi = list(
"=" = list("", "="),
"<" = list("", "=", ">"),
diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm
index 78833453a7f..e5d983b7649 100644
--- a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm
+++ b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm
@@ -25,7 +25,7 @@
//
// assignments : assignment, [',' assignments]
// assignment : '=' expression
-// variable : | '.' variable
+// variable : | '.' variable | '[' ']' | '[' ']' '.' variable
//
// bool_expression : expression comparitor expression [bool_operator bool_expression]
// expression : ( unary_expression | '(' expression ')' | value ) [binary_operator expression]
@@ -336,6 +336,13 @@
variable(i, list/node)
var/list/L = list(token(i))
node[++node.len] = L
+
+ if(token(i) == "\[")
+ L += token(i + 1)
+ i += 2
+
+ if(token(i) != "\]")
+ parse_error("Missing \] at end of reference.")
if(token(i + 1) == ".")
L += "."
@@ -519,7 +526,11 @@
if(token(i) == "null")
node += "null"
i++
-
+
+ else if(lowertext(copytext(token(i), 1, 3)) == "0x" && isnum(hex2num(copytext(token(i), 3))))
+ node += hex2num(copytext(token(i), 3))
+ i++
+
else if(isnum(text2num(token(i))))
node += text2num(token(i))
i++