Removes all relative heresy (#13969)

Removes all relative heresy
This commit is contained in:
AffectedArc07
2020-09-16 17:52:20 +01:00
committed by GitHub
parent 185b5c4a08
commit 90fd9a8fb8
89 changed files with 1298 additions and 1260 deletions
+4 -4
View File
@@ -1,6 +1,6 @@
#define MAX_ADMIN_BANS_PER_ADMIN 1
datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration = -1, var/reason, var/job = "", var/rounds = 0, var/banckey = null, var/banip = null, var/bancid = null)
/datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration = -1, var/reason, var/job = "", var/rounds = 0, var/banckey = null, var/banip = null, var/bancid = null)
if(!check_rights(R_BAN)) return
@@ -153,7 +153,7 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration =
else
flag_account_for_forum_sync(ckey)
datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "")
/datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "")
if(!check_rights(R_BAN)) return
@@ -233,7 +233,7 @@ datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "")
else
flag_account_for_forum_sync(ckey)
datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null)
/datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null)
if(!check_rights(R_BAN)) return
@@ -297,7 +297,7 @@ datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null)
to_chat(usr, "Cancelled")
return
datum/admins/proc/DB_ban_unban_by_id(var/id)
/datum/admins/proc/DB_ban_unban_by_id(var/id)
if(!check_rights(R_BAN))
return
+1 -1
View File
@@ -1,5 +1,5 @@
//Blocks an attempt to connect before even creating our client datum thing.
world/IsBanned(key, address, computer_id, type, check_ipintel = TRUE)
/world/IsBanned(key, address, computer_id, type, check_ipintel = TRUE)
if(!config.ban_legacy_system)
if(address)
+332 -336
View File
@@ -89,403 +89,443 @@
/datum/SDQL_parser/proc/tokenl(i)
return lowertext(token(i))
/datum/SDQL_parser/proc
//query: select_query | delete_query | update_query
query(i, list/node)
query_type = tokenl(i)
/datum/SDQL_parser/proc/query(i, list/node)
query_type = tokenl(i)
switch(query_type)
if("select")
select_query(i, node)
switch(query_type)
if("select")
select_query(i, node)
if("delete")
delete_query(i, node)
if("delete")
delete_query(i, node)
if("update")
update_query(i, node)
if("update")
update_query(i, node)
if("call")
call_query(i, node)
if("call")
call_query(i, node)
if("explain")
node += "explain"
node["explain"] = list()
query(i + 1, node["explain"])
if("explain")
node += "explain"
node["explain"] = list()
query(i + 1, node["explain"])
// select_query: 'SELECT' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]
select_query(i, list/node)
var/list/select = list()
i = select_list(i + 1, select)
/datum/SDQL_parser/proc/select_query(i, list/node)
var/list/select = list()
i = select_list(i + 1, select)
node += "select"
node["select"] = select
node += "select"
node["select"] = select
var/list/from = list()
if(tokenl(i) in list("from", "in"))
i = from_list(i + 1, from)
else
from += "world"
var/list/from = list()
if(tokenl(i) in list("from", "in"))
i = from_list(i + 1, from)
else
from += "world"
node += "from"
node["from"] = from
node += "from"
node["from"] = from
if(tokenl(i) == "where")
var/list/where = list()
i = bool_expression(i + 1, where)
if(tokenl(i) == "where")
var/list/where = list()
i = bool_expression(i + 1, where)
node += "where"
node["where"] = where
node += "where"
node["where"] = where
return i
return i
//delete_query: 'DELETE' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]
delete_query(i, list/node)
var/list/select = list()
i = select_list(i + 1, select)
/datum/SDQL_parser/proc/delete_query(i, list/node)
var/list/select = list()
i = select_list(i + 1, select)
node += "delete"
node["delete"] = select
node += "delete"
node["delete"] = select
var/list/from = list()
if(tokenl(i) in list("from", "in"))
i = from_list(i + 1, from)
else
from += "world"
var/list/from = list()
if(tokenl(i) in list("from", "in"))
i = from_list(i + 1, from)
else
from += "world"
node += "from"
node["from"] = from
node += "from"
node["from"] = from
if(tokenl(i) == "where")
var/list/where = list()
i = bool_expression(i + 1, where)
if(tokenl(i) == "where")
var/list/where = list()
i = bool_expression(i + 1, where)
node += "where"
node["where"] = where
node += "where"
node["where"] = where
return i
return i
//update_query: 'UPDATE' select_list [('FROM' | 'IN') from_list] 'SET' assignments ['WHERE' bool_expression]
update_query(i, list/node)
var/list/select = list()
i = select_list(i + 1, select)
/datum/SDQL_parser/proc/update_query(i, list/node)
var/list/select = list()
i = select_list(i + 1, select)
node += "update"
node["update"] = select
node += "update"
node["update"] = select
var/list/from = list()
if(tokenl(i) in list("from", "in"))
i = from_list(i + 1, from)
else
from += "world"
var/list/from = list()
if(tokenl(i) in list("from", "in"))
i = from_list(i + 1, from)
else
from += "world"
node += "from"
node["from"] = from
node += "from"
node["from"] = from
if(tokenl(i) != "set")
i = parse_error("UPDATE has misplaced SET")
if(tokenl(i) != "set")
i = parse_error("UPDATE has misplaced SET")
var/list/set_assignments = list()
i = assignments(i + 1, set_assignments)
var/list/set_assignments = list()
i = assignments(i + 1, set_assignments)
node += "set"
node["set"] = set_assignments
node += "set"
node["set"] = set_assignments
if(tokenl(i) == "where")
var/list/where = list()
i = bool_expression(i + 1, where)
if(tokenl(i) == "where")
var/list/where = list()
i = bool_expression(i + 1, where)
node += "where"
node["where"] = where
node += "where"
node["where"] = where
return i
return i
//call_query: 'CALL' call_function ['ON' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]]
call_query(i, list/node)
var/list/func = list()
i = variable(i + 1, func)
/datum/SDQL_parser/proc/call_query(i, list/node)
var/list/func = list()
i = variable(i + 1, func)
node += "call"
node["call"] = func
if(tokenl(i) != "on")
return i
var/list/select = list()
i = select_list(i + 1, select)
node += "on"
node["on"] = select
var/list/from = list()
if(tokenl(i) in list("from", "in"))
i = from_list(i + 1, from)
else
from += "world"
node += "from"
node["from"] = from
if(tokenl(i) == "where")
var/list/where = list()
i = bool_expression(i + 1, where)
node += "where"
node["where"] = where
node += "call"
node["call"] = func
if(tokenl(i) != "on")
return i
var/list/select = list()
i = select_list(i + 1, select)
node += "on"
node["on"] = select
var/list/from = list()
if(tokenl(i) in list("from", "in"))
i = from_list(i + 1, from)
else
from += "world"
node += "from"
node["from"] = from
if(tokenl(i) == "where")
var/list/where = list()
i = bool_expression(i + 1, where)
node += "where"
node["where"] = where
return i
//select_list: select_item [',' select_list]
select_list(i, list/node)
i = select_item(i, node)
/datum/SDQL_parser/proc/select_list(i, list/node)
i = select_item(i, node)
if(token(i) == ",")
i = select_list(i + 1, node)
if(token(i) == ",")
i = select_list(i + 1, node)
return i
return i
//from_list: from_item [',' from_list]
from_list(i, list/node)
i = from_item(i, node)
/datum/SDQL_parser/proc/from_list(i, list/node)
i = from_item(i, node)
if(token(i) == ",")
i = from_list(i + 1, node)
if(token(i) == ",")
i = from_list(i + 1, node)
return i
return i
//assignments: assignment, [',' assignments]
assignments(i, list/node)
i = assignment(i, node)
/datum/SDQL_parser/proc/assignments(i, list/node)
i = assignment(i, node)
if(token(i) == ",")
i = assignments(i + 1, node)
if(token(i) == ",")
i = assignments(i + 1, node)
return i
return i
//select_item: '*' | select_function | object_type
select_item(i, list/node)
/datum/SDQL_parser/proc/select_item(i, list/node)
if(token(i) == "*")
node += "*"
i++
if(token(i) == "*")
node += "*"
i++
else if(tokenl(i) in select_functions)
i = select_function(i, node)
else if(tokenl(i) in select_functions)
i = select_function(i, node)
else
i = object_type(i, node)
else
i = object_type(i, node)
return i
return i
//from_item: 'world' | object_type
from_item(i, list/node)
/datum/SDQL_parser/proc/from_item(i, list/node)
if(token(i) == "world")
node += "world"
i++
if(token(i) == "world")
node += "world"
i++
else
i = object_type(i, node)
else
i = object_type(i, node)
return i
return i
//bool_expression: expression [bool_operator bool_expression]
bool_expression(i, list/node)
/datum/SDQL_parser/proc/bool_expression(i, list/node)
var/list/bool = list()
i = expression(i, bool)
var/list/bool = list()
i = expression(i, bool)
node[++node.len] = bool
node[++node.len] = bool
if(tokenl(i) in boolean_operators)
i = bool_operator(i, node)
i = bool_expression(i, node)
if(tokenl(i) in boolean_operators)
i = bool_operator(i, node)
i = bool_expression(i, node)
return i
return i
//assignment: <variable name> '=' expression
assignment(var/i, var/list/node, var/list/assignment_list = list())
assignment_list += token(i)
/datum/SDQL_parser/proc/assignment(var/i, var/list/node, var/list/assignment_list = list())
assignment_list += token(i)
if(token(i + 1) == ".")
i = assignment(i + 2, node, assignment_list)
if(token(i + 1) == ".")
i = assignment(i + 2, node, assignment_list)
else if(token(i + 1) == "=")
var/exp_list = list()
node[assignment_list] = exp_list
else if(token(i + 1) == "=")
var/exp_list = list()
node[assignment_list] = exp_list
i = expression(i + 2, exp_list)
i = expression(i + 2, exp_list)
else
parse_error("Assignment expected, but no = found")
else
parse_error("Assignment expected, but no = found")
return i
return i
//variable: <variable name> | <variable name> '.' variable
variable(i, list/node)
var/list/L = list(token(i))
node[++node.len] = L
/datum/SDQL_parser/proc/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) == "\[")
L += token(i + 1)
i += 2
if(token(i) != "\]")
parse_error("Missing \] at end of reference.")
if(token(i) != "\]")
parse_error("Missing \] at end of reference.")
if(token(i + 1) == ".")
L += "."
i = variable(i + 2, L)
if(token(i + 1) == ".")
L += "."
i = variable(i + 2, L)
else if(token(i + 1) == "(") // OH BOY PROC
var/list/arguments = list()
i = call_function(i, null, arguments)
L += ":"
L[++L.len] = arguments
else if(token(i + 1) == "(") // OH BOY PROC
var/list/arguments = list()
i = call_function(i, null, arguments)
L += ":"
L[++L.len] = arguments
else if(token(i + 1) == "\[") // list index
var/list/expression = list()
i = expression(i + 2, expression)
if(token(i) != "]")
parse_error("Missing ] at the end of list access.")
else if(token(i + 1) == "\[") // list index
var/list/expression = list()
i = expression(i + 2, expression)
if(token(i) != "]")
parse_error("Missing ] at the end of list access.")
L += "\["
L[++L.len] = expression
i++
L += "\["
L[++L.len] = expression
i++
else
i++
else
i++
return i
return i
//object_type: <type path> | string
object_type(i, list/node)
/datum/SDQL_parser/proc/object_type(i, list/node)
if(copytext(token(i), 1, 2) == "/")
node += token(i)
if(copytext(token(i), 1, 2) == "/")
node += token(i)
else
i = string(i, node)
else
i = string(i, node)
return i + 1
return i + 1
//comparitor: '=' | '==' | '!=' | '<>' | '<' | '<=' | '>' | '>='
comparitor(i, list/node)
/datum/SDQL_parser/proc/comparitor(i, list/node)
if(token(i) in list("=", "==", "!=", "<>", "<", "<=", ">", ">="))
node += token(i)
if(token(i) in list("=", "==", "!=", "<>", "<", "<=", ">", ">="))
node += token(i)
else
parse_error("Unknown comparitor [token(i)]")
else
parse_error("Unknown comparitor [token(i)]")
return i + 1
return i + 1
//bool_operator: 'AND' | '&&' | 'OR' | '||'
bool_operator(i, list/node)
/datum/SDQL_parser/proc/bool_operator(i, list/node)
if(tokenl(i) in list("and", "or", "&&", "||"))
node += token(i)
if(tokenl(i) in list("and", "or", "&&", "||"))
node += token(i)
else
parse_error("Unknown comparitor [token(i)]")
else
parse_error("Unknown comparitor [token(i)]")
return i + 1
return i + 1
//string: ''' <some text> ''' | '"' <some text > '"'
string(i, list/node)
/datum/SDQL_parser/proc/string(i, list/node)
if(copytext(token(i), 1, 2) in list("'", "\""))
node += token(i)
if(copytext(token(i), 1, 2) in list("'", "\""))
node += token(i)
else
parse_error("Expected string but found '[token(i)]'")
else
parse_error("Expected string but found '[token(i)]'")
return i + 1
return i + 1
//array: '{' expression, expression, ... '}'
array(var/i, var/list/node)
// Arrays get turned into this: list("{", list(exp_1a = exp_1b, ...), ...), "{" is to mark the next node as an array.
if(copytext(token(i), 1, 2) != "{")
parse_error("Expected an array but found '[token(i)]'")
return i + 1
node += token(i) // Add the "{"
var/list/expression_list = list()
if(token(i + 1) != "}")
var/list/temp_expression_list = list()
do
i = expression(i + 1, temp_expression_list)
if(token(i) == ",")
expression_list[++expression_list.len] = temp_expression_list
temp_expression_list = list()
while(token(i) && token(i) != "}")
expression_list[++expression_list.len] = temp_expression_list
else
i++
node[++node.len] = expression_list
/datum/SDQL_parser/proc/array(var/i, var/list/node)
// Arrays get turned into this: list("{", list(exp_1a = exp_1b, ...), ...), "{" is to mark the next node as an array.
if(copytext(token(i), 1, 2) != "{")
parse_error("Expected an array but found '[token(i)]'")
return i + 1
node += token(i) // Add the "{"
var/list/expression_list = list()
if(token(i + 1) != "}")
var/list/temp_expression_list = list()
do
i = expression(i + 1, temp_expression_list)
if(token(i) == ",")
expression_list[++expression_list.len] = temp_expression_list
temp_expression_list = list()
while(token(i) && token(i) != "}")
expression_list[++expression_list.len] = temp_expression_list
else
i++
node[++node.len] = expression_list
return i + 1
//call_function: <function name> ['(' [arguments] ')']
call_function(i, list/node, list/arguments)
var/list/cur_argument = list()
if(length(tokenl(i)))
var/procname = ""
if(tokenl(i) == "global" && token(i + 1) == ".") // Global proc.
i += 2
procname = "global."
node += procname + token(i++)
if(token(i) != "(")
parse_error("Expected ( but found '[token(i)]'")
else if(token(i + 1) != ")")
do
i = expression(i + 1, cur_argument)
if(token(i) == ",")
arguments += list(cur_argument)
cur_argument = list()
continue
while(token(i) && token(i) != ")")
arguments += list(cur_argument)
else
i++
/datum/SDQL_parser/proc/call_function(i, list/node, list/arguments)
var/list/cur_argument = list()
if(length(tokenl(i)))
var/procname = ""
if(tokenl(i) == "global" && token(i + 1) == ".") // Global proc.
i += 2
procname = "global."
node += procname + token(i++)
if(token(i) != "(")
parse_error("Expected ( but found '[token(i)]'")
else if(token(i + 1) != ")")
do
i = expression(i + 1, cur_argument)
if(token(i) == ",")
arguments += list(cur_argument)
cur_argument = list()
continue
while(token(i) && token(i) != ")")
arguments += list(cur_argument)
else
parse_error("Expected a function but found nothing")
return i + 1
i++
else
parse_error("Expected a function but found nothing")
return i + 1
//select_function: count_function
select_function(i, list/node)
/datum/SDQL_parser/proc/select_function(i, list/node)
parse_error("Sorry, function calls aren't available yet")
parse_error("Sorry, function calls aren't available yet")
return i
return i
//expression: ( unary_expression | '(' expression ')' | value ) [binary_operator expression]
expression(i, list/node)
/datum/SDQL_parser/proc/expression(i, list/node)
if(token(i) in unary_operators)
i = unary_expression(i, node)
else if(token(i) == "(")
var/list/expr = list()
i = expression(i + 1, expr)
if(token(i) != ")")
parse_error("Missing ) at end of expression.")
else
i++
node[++node.len] = expr
else
i = value(i, node)
if(token(i) in binary_operators)
i = binary_operator(i, node)
i = expression(i, node)
else if(token(i) in comparitors)
i = binary_operator(i, node)
var/list/rhs = list()
i = expression(i, rhs)
node[++node.len] = rhs
return i
//unary_expression: unary_operator ( unary_expression | value | '(' expression ')' )
/datum/SDQL_parser/proc/unary_expression(i, list/node)
if(token(i) in unary_operators)
var/list/unary_exp = list()
unary_exp += token(i)
i++
if(token(i) in unary_operators)
i = unary_expression(i, node)
i = unary_expression(i, unary_exp)
else if(token(i) == "(")
var/list/expr = list()
@@ -498,99 +538,55 @@
else
i++
node[++node.len] = expr
unary_exp[++unary_exp.len] = expr
else
i = value(i, node)
i = value(i, unary_exp)
if(token(i) in binary_operators)
i = binary_operator(i, node)
i = expression(i, node)
else if(token(i) in comparitors)
i = binary_operator(i, node)
var/list/rhs = list()
i = expression(i, rhs)
node[++node.len] = rhs
node[++node.len] = unary_exp
return i
else
parse_error("Expected unary operator but found '[token(i)]'")
//unary_expression: unary_operator ( unary_expression | value | '(' expression ')' )
unary_expression(i, list/node)
if(token(i) in unary_operators)
var/list/unary_exp = list()
unary_exp += token(i)
i++
if(token(i) in unary_operators)
i = unary_expression(i, unary_exp)
else if(token(i) == "(")
var/list/expr = list()
i = expression(i + 1, expr)
if(token(i) != ")")
parse_error("Missing ) at end of expression.")
else
i++
unary_exp[++unary_exp.len] = expr
else
i = value(i, unary_exp)
node[++node.len] = unary_exp
else
parse_error("Expected unary operator but found '[token(i)]'")
return i
return i
//binary_operator: comparitor | '+' | '-' | '/' | '*' | '&' | '|' | '^'
binary_operator(i, list/node)
/datum/SDQL_parser/proc/binary_operator(i, list/node)
if(token(i) in (binary_operators + comparitors))
node += token(i)
if(token(i) in (binary_operators + comparitors))
node += token(i)
else
parse_error("Unknown binary operator [token(i)]")
else
parse_error("Unknown binary operator [token(i)]")
return i + 1
return i + 1
//value: variable | string | number | 'null'
value(i, list/node)
/datum/SDQL_parser/proc/value(i, list/node)
if(token(i) == "null")
node += "null"
i++
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(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++
else if(isnum(text2num(token(i))))
node += text2num(token(i))
i++
else if(copytext(token(i), 1, 2) in list("'", "\""))
i = string(i, node)
else if(copytext(token(i), 1, 2) in list("'", "\""))
i = string(i, node)
else if(copytext(token(i), 1, 2) == "{") // Start a list.
i = array(i, node)
else if(copytext(token(i), 1, 2) == "{") // Start a list.
i = array(i, node)
else
i = variable(i, node)
else
i = variable(i, node)
return i
return i
/*EXPLAIN SELECT * WHERE 42 = 6 * 9 OR val = - 5 == 7*/
+3 -3
View File
@@ -26,9 +26,9 @@ GLOBAL_VAR_INIT(intercom_range_display_status, 0)
icon = 'icons/480x480.dmi'
icon_state = "25percent"
New()
src.pixel_x = -224
src.pixel_y = -224
/obj/effect/debugging/camera_range/New()
src.pixel_x = -224
src.pixel_y = -224
/obj/effect/debugging/mapfix_marker
name = "map fix marker"
+1 -1
View File
@@ -1,4 +1,4 @@
client/proc/one_click_antag()
/client/proc/one_click_antag()
set name = "Create Antagonist"
set desc = "Auto-create an antagonist of your choice"
set category = "Event"
+1 -1
View File
@@ -201,7 +201,7 @@
feedback_add_details("admin_verb","GOD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0)
/proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0)
if(automute)
if(!config.automute_on)
return
@@ -60,7 +60,7 @@
* Guns - I'm making these specifically so that I dont spawn a pile of fully loaded weapons on the map.
*/
//Captain's retro laser - Fires practice laser shots instead.
obj/item/gun/energy/laser/retro/sc_retro
/obj/item/gun/energy/laser/retro/sc_retro
desc = "An older model of the basic lasergun, no longer used by Nanotrasen's security or military forces."
ammo_type = list(/obj/item/ammo_casing/energy/laser/practice)
clumsy_check = 0 //No sense in having a harmless gun blow up in the clowns face
+1 -1
View File
@@ -1,6 +1,6 @@
GLOBAL_LIST_EMPTY(clientmessages)
proc/addclientmessage(var/ckey, var/message)
/proc/addclientmessage(var/ckey, var/message)
ckey = ckey(ckey)
if(!ckey || !message)
return
+3 -3
View File
@@ -193,7 +193,7 @@
toggle_sound = 'sound/items/zippoclose.ogg'
dog_fashion = null
obj/item/clothing/head/helmet/redtaghelm
/obj/item/clothing/head/helmet/redtaghelm
name = "red laser tag helmet"
desc = "They have chosen their own end."
icon_state = "redtaghelm"
@@ -204,7 +204,7 @@ obj/item/clothing/head/helmet/redtaghelm
flags_inv = HIDEEARS|HIDEEYES
dog_fashion = null
obj/item/clothing/head/helmet/bluetaghelm
/obj/item/clothing/head/helmet/bluetaghelm
name = "blue laser tag helmet"
desc = "They'll need more men."
icon_state = "bluetaghelm"
@@ -215,7 +215,7 @@ obj/item/clothing/head/helmet/bluetaghelm
flags_inv = HIDEEARS|HIDEEYES
dog_fashion = null
obj/item/clothing/head/blob
/obj/item/clothing/head/blob
name = "blob hat"
desc = "A collectible hat handed out at the latest Blob Family Reunion."
icon_state = "blobhat"
+19 -14
View File
@@ -9,8 +9,8 @@
heat_protection = FEET
max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT
redcoat
item_color = "redcoat" //Exists for washing machines. Is not different from black shoes in any way.
/obj/item/clothing/shoes/black/redcoat
item_color = "redcoat" //Exists for washing machines. Is not different from black shoes in any way.
/obj/item/clothing/shoes/black/greytide
flags = NODROP
@@ -20,18 +20,23 @@
desc = "A pair of brown shoes."
icon_state = "brown"
captain
item_color = "captain" //Exists for washing machines. Is not different from brown shoes in any way.
hop
item_color = "hop" //Exists for washing machines. Is not different from brown shoes in any way.
ce
item_color = "chief" //Exists for washing machines. Is not different from brown shoes in any way.
rd
item_color = "director" //Exists for washing machines. Is not different from brown shoes in any way.
cmo
item_color = "medical" //Exists for washing machines. Is not different from brown shoes in any way.
cmo
item_color = "cargo" //Exists for washing machines. Is not different from brown shoes in any way.
/obj/item/clothing/shoes/brown/captain
item_color = "captain" //Exists for washing machines. Is not different from brown shoes in any way.
/obj/item/clothing/shoes/brown/hop
item_color = "hop" //Exists for washing machines. Is not different from brown shoes in any way.
/obj/item/clothing/shoes/brown/ce
item_color = "chief" //Exists for washing machines. Is not different from brown shoes in any way.
/obj/item/clothing/shoes/brown/rd
item_color = "director" //Exists for washing machines. Is not different from brown shoes in any way.
/obj/item/clothing/shoes/brown/cmo
item_color = "medical" //Exists for washing machines. Is not different from brown shoes in any way.
/obj/item/clothing/shoes/brown/qm
item_color = "cargo" //Exists for washing machines. Is not different from brown shoes in any way.
/obj/item/clothing/shoes/blue
name = "blue shoes"
+1 -1
View File
@@ -53,7 +53,7 @@
magboot_state = "syndiemag"
origin_tech = "magnets=4;syndicate=2"
obj/item/clothing/shoes/magboots/syndie/advance //For the Syndicate Strike Team
/obj/item/clothing/shoes/magboots/syndie/advance //For the Syndicate Strike Team
desc = "Reverse-engineered magboots that appear to be based on an advanced model, as they have a lighter magnetic pull. Property of Gorlex Marauders."
name = "advanced blood-red magboots"
slowdown_active = SHOES_SLOWDOWN
+4 -4
View File
@@ -83,7 +83,7 @@
icon_state = "syndicate-helm-black"
item_state = "syndicate-helm-black"
obj/item/clothing/head/helmet/space/syndicate/black/strike
/obj/item/clothing/head/helmet/space/syndicate/black/strike
name = "Syndicate Strike Team commando helmet"
desc = "A heavily armored black helmet that is only given to high-ranking Syndicate operatives."
armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) //Matches DS gear.
@@ -95,7 +95,7 @@ obj/item/clothing/head/helmet/space/syndicate/black/strike
icon_state = "syndicate-black"
item_state = "syndicate-black"
obj/item/clothing/suit/space/syndicate/black/strike
/obj/item/clothing/suit/space/syndicate/black/strike
name = "Syndicate Strike Team commando space suit"
desc = "A heavily armored, black space suit that is only given to high-ranking Syndicate operatives."
armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) //Matches DS gear.
@@ -156,7 +156,7 @@ obj/item/clothing/suit/space/syndicate/black/strike
icon_state = "syndicate-helm-black-red"
item_state = "syndicate-helm-black-red"
obj/item/clothing/head/helmet/space/syndicate/black/red/strike
/obj/item/clothing/head/helmet/space/syndicate/black/red/strike
name = "Syndicate Strike Team leader helmet"
desc = "A heavily armored, black and red space helmet that is only given to elite Syndicate operatives, it looks particularly menacing."
armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) //Matches DS gear.
@@ -168,7 +168,7 @@ obj/item/clothing/head/helmet/space/syndicate/black/red/strike
icon_state = "syndicate-black-red"
item_state = "syndicate-black-red"
obj/item/clothing/suit/space/syndicate/black/red/strike
/obj/item/clothing/suit/space/syndicate/black/red/strike
name = "Syndicate Strike Team leader space suit"
desc = "A heavily armored, black and red space suit that is only given to elite Syndicate operatives, it looks particularly menacing."
armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) //Matches DS gear.
@@ -1,8 +1,8 @@
//CONTAINS: Suit fibers and Detective's Scanning Computer
atom/var/list/suit_fibers
/atom/var/list/suit_fibers
atom/proc/add_fibers(mob/living/carbon/human/M)
/atom/proc/add_fibers(mob/living/carbon/human/M)
if(M.gloves && istype(M.gloves,/obj/item/clothing/))
var/obj/item/clothing/gloves/G = M.gloves
if(G.transfer_blood > 1) //bloodied gloves transfer blood to touched objects
+9 -9
View File
@@ -66,11 +66,11 @@
icon_state = "shrimp_raw"
filling_color = "#FF1C1C"
New()
..()
desc = pick("Anyway, like I was sayin', shrimp is the fruit of the sea.", "You can barbecue it, boil it, broil it, bake it, saute it.")
reagents.add_reagent("protein", 1)
src.bitesize = 1
/obj/item/reagent_containers/food/snacks/shrimp/New()
..()
desc = pick("Anyway, like I was sayin', shrimp is the fruit of the sea.", "You can barbecue it, boil it, broil it, bake it, saute it.")
reagents.add_reagent("protein", 1)
src.bitesize = 1
/obj/item/reagent_containers/food/snacks/feederfish
name = "feeder fish"
@@ -79,10 +79,10 @@
icon_state = "feederfish"
filling_color = "#FF1C1C"
New()
..()
reagents.add_reagent("protein", 1)
src.bitesize = 1
/obj/item/reagent_containers/food/snacks/shrimp/New()
..()
reagents.add_reagent("protein", 1)
src.bitesize = 1
/obj/item/fish
name = "fish"
+4 -4
View File
@@ -1,4 +1,4 @@
proc/Intoxicated(phrase)
/proc/Intoxicated(phrase)
phrase = html_decode(phrase)
var/leng=length(phrase)
var/counter=length(phrase)
@@ -21,7 +21,7 @@ proc/Intoxicated(phrase)
newphrase+="[newletter]";counter-=1
return newphrase
proc/NewStutter(phrase,stunned)
/proc/NewStutter(phrase,stunned)
phrase = html_decode(phrase)
var/list/split_phrase = splittext(phrase," ") //Split it up into words.
@@ -57,10 +57,10 @@ proc/NewStutter(phrase,stunned)
return sanitize(jointext(split_phrase," "))
proc/Stagger(mob/M,d) //Technically not a filter, but it relates to drunkenness.
/proc/Stagger(mob/M,d) //Technically not a filter, but it relates to drunkenness.
step(M, pick(d,turn(d,90),turn(d,-90)))
proc/Ellipsis(original_msg, chance = 50)
/proc/Ellipsis(original_msg, chance = 50)
if(chance <= 0) return "..."
if(chance >= 100) return original_msg
@@ -8,17 +8,17 @@
onicon = "cereal_on"
officon = "cereal_off"
obj/machinery/cooker/cerealmaker/setIcon(obj/item/copyme, obj/item/copyto)
/obj/machinery/cooker/cerealmaker/setIcon(obj/item/copyme, obj/item/copyto)
var/image/img = new(copyme.icon, copyme.icon_state)
img.transform *= 0.7
copyto.overlays += img
copyto.overlays += copyme.overlays
obj/machinery/cooker/cerealmaker/changename(obj/item/name, obj/item/setme)
/obj/machinery/cooker/cerealmaker/changename(obj/item/name, obj/item/setme)
setme.name = "box of [name] cereal"
setme.desc = "[name.desc] It has been [thiscooktype]"
obj/machinery/cooker/cerealmaker/gettype()
/obj/machinery/cooker/cerealmaker/gettype()
var/obj/item/reagent_containers/food/snacks/cereal/type = new(get_turf(src))
return type
@@ -11,7 +11,7 @@
onicon = "grill_on"
officon = "grill_off"
obj/machinery/cooker/foodgrill/putIn(obj/item/In, mob/chef)
/obj/machinery/cooker/foodgrill/putIn(obj/item/In, mob/chef)
..()
var/image/img = new(In.icon, In.icon_state)
img.pixel_y = 5
@@ -449,7 +449,7 @@
)
result = /obj/item/reagent_containers/food/snacks/twobread
datum/recipe/microwave/slimesandwich
/datum/recipe/microwave/slimesandwich
reagents = list("slimejelly" = 5)
items = list(
/obj/item/reagent_containers/food/snacks/breadslice,
+1 -1
View File
@@ -2,7 +2,7 @@
Everything karma related is here.
Part of karma purchase is handled in client_procs.dm */
proc/sql_report_karma(var/mob/spender, var/mob/receiver)
/proc/sql_report_karma(var/mob/spender, var/mob/receiver)
var/sqlspendername = sanitizeSQL(spender.name)
var/sqlspenderkey = sanitizeSQL(spender.ckey)
var/sqlreceivername = sanitizeSQL(receiver.name)
+39 -39
View File
@@ -101,32 +101,32 @@
/obj/structure/bookcase/manuals/medical
name = "Medical Manuals bookcase"
New()
..()
new /obj/item/book/manual/medical_cloning(src)
update_icon()
/obj/structure/bookcase/manuals/medical/New()
..()
new /obj/item/book/manual/medical_cloning(src)
update_icon()
/obj/structure/bookcase/manuals/engineering
name = "Engineering Manuals bookcase"
New()
..()
new /obj/item/book/manual/engineering_construction(src)
new /obj/item/book/manual/engineering_particle_accelerator(src)
new /obj/item/book/manual/engineering_hacking(src)
new /obj/item/book/manual/engineering_guide(src)
new /obj/item/book/manual/engineering_singularity_safety(src)
new /obj/item/book/manual/robotics_cyborgs(src)
update_icon()
/obj/structure/bookcase/manuals/engineering/New()
..()
new /obj/item/book/manual/engineering_construction(src)
new /obj/item/book/manual/engineering_particle_accelerator(src)
new /obj/item/book/manual/engineering_hacking(src)
new /obj/item/book/manual/engineering_guide(src)
new /obj/item/book/manual/engineering_singularity_safety(src)
new /obj/item/book/manual/robotics_cyborgs(src)
update_icon()
/obj/structure/bookcase/manuals/research_and_development
name = "R&D Manuals bookcase"
New()
..()
new /obj/item/book/manual/research_and_development(src)
update_icon()
/obj/structure/bookcase/manuals/research_and_development/New()
..()
new /obj/item/book/manual/research_and_development(src)
update_icon()
/*
@@ -288,26 +288,26 @@
var/obj/item/book/book // Currently scanned book
var/mode = 0 // 0 - Scan only, 1 - Scan and Set Buffer, 2 - Scan and Attempt to Check In, 3 - Scan and Attempt to Add to Inventory
attack_self(mob/user as mob)
mode += 1
if(mode > 3)
mode = 0
to_chat(user, "[src] Status Display:")
var/modedesc
switch(mode)
if(0)
modedesc = "Scan book to local buffer."
if(1)
modedesc = "Scan book to local buffer and set associated computer buffer to match."
if(2)
modedesc = "Scan book to local buffer, attempt to check in scanned book."
if(3)
modedesc = "Scan book to local buffer, attempt to add book to general inventory."
else
modedesc = "ERROR"
to_chat(user, " - Mode [mode] : [modedesc]")
if(src.computer)
to_chat(user, "<font color=green>Computer has been associated with this unit.</font>")
/obj/item/barcodescanner/attack_self(mob/user as mob)
mode += 1
if(mode > 3)
mode = 0
to_chat(user, "[src] Status Display:")
var/modedesc
switch(mode)
if(0)
modedesc = "Scan book to local buffer."
if(1)
modedesc = "Scan book to local buffer and set associated computer buffer to match."
if(2)
modedesc = "Scan book to local buffer, attempt to check in scanned book."
if(3)
modedesc = "Scan book to local buffer, attempt to add book to general inventory."
else
to_chat(user, "<font color=red>No associated computer found. Only local scans will function properly.</font>")
to_chat(user, "\n")
modedesc = "ERROR"
to_chat(user, " - Mode [mode] : [modedesc]")
if(src.computer)
to_chat(user, "<font color=green>Computer has been associated with this unit.</font>")
else
to_chat(user, "<font color=red>No associated computer found. Only local scans will function properly.</font>")
to_chat(user, "\n")
+1 -1
View File
@@ -103,7 +103,7 @@
add_attack_logs(A, D, "Melee attacked with martial-art [src] : Neck Chop", ATKLOG_ALL)
return 1
datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
/datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
if(check_streak(A,D))
return 1
..()
+1 -1
View File
@@ -38,7 +38,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
GLOBAL_LIST_EMPTY(channel_to_radio_key)
proc/get_radio_key_from_channel(var/channel)
/proc/get_radio_key_from_channel(var/channel)
var/key = GLOB.channel_to_radio_key[channel]
if(!key)
for(var/radio_key in GLOB.department_radio_keys)
@@ -243,7 +243,7 @@
add_fingerprint(user)
proc/robot_healthscan(mob/user, mob/living/M)
/proc/robot_healthscan(mob/user, mob/living/M)
var/scan_type
if(istype(M, /mob/living/silicon/robot))
scan_type = "robot"
@@ -71,9 +71,6 @@
var/spawn_delay = 600
var/turn_on = 0
var/auto_spawn = 1
proc
warpbots()
/mob/living/simple_animal/hostile/hivebot/tele/New()
..()
@@ -83,7 +80,7 @@
visible_message("<span class='danger'>The [src] warps in!</span>")
playsound(src.loc, 'sound/effects/empulse.ogg', 25, 1)
/mob/living/simple_animal/hostile/hivebot/tele/warpbots()
/mob/living/simple_animal/hostile/hivebot/tele/proc/warpbots()
icon_state = "def_radar"
visible_message("<span class='warning'>The [src] turns on!</span>")
while(bot_amt > 0)
@@ -524,7 +524,7 @@ Difficulty: Medium
else
animate(src, pixel_x = -16, pixel_z = 0, time = 5)
obj/effect/temp_visual/fireball
/obj/effect/temp_visual/fireball
icon = 'icons/obj/wizard.dmi'
icon_state = "fireball"
name = "fireball"
+1 -1
View File
@@ -288,7 +288,7 @@
S.message = Gibberish(S.message, p)
proc/muffledspeech(phrase)
/proc/muffledspeech(phrase)
phrase = html_decode(phrase)
var/leng=length(phrase)
var/counter=length(phrase)
@@ -237,7 +237,7 @@
data["totalprice"] = total_price
return data
obj/machinery/lapvend/attackby(obj/item/I, mob/user)
/obj/machinery/lapvend/attackby(obj/item/I, mob/user)
var/obj/item/card/id/C
if(istype(I, /obj/item/card/id))
C = I
+1 -1
View File
@@ -42,7 +42,7 @@
if(in_range(user, src) && toppaper)
. += toppaper.examine(user)
obj/item/clipboard/proc/penPlacement(mob/user, obj/item/pen/P, placing)
/obj/item/clipboard/proc/penPlacement(mob/user, obj/item/pen/P, placing)
if(placing)
if(containedpen)
to_chat(user, "<span class='warning'>There's already a pen in [src]!</span>")
@@ -150,7 +150,7 @@
// Explicitly only allow deletion from the local camera
deletepicture(src)
obj/item/camera/siliconcam/proc/getsource()
/obj/item/camera/siliconcam/proc/getsource()
if(istype(src.loc, /mob/living/silicon/ai))
return src
+1 -1
View File
@@ -229,7 +229,7 @@ By design, d1 is the smallest direction and d2 is the highest
if(current_size >= STAGE_FIVE)
deconstruct()
obj/structure/cable/proc/cable_color(colorC)
/obj/structure/cable/proc/cable_color(colorC)
if(!colorC)
color = COLOR_RED
else if(colorC == "rainbow")
@@ -87,7 +87,7 @@
damage = 7
armour_penetration = 0
obj/item/projectile/bullet/saw/incen/Move()
/obj/item/projectile/bullet/saw/incen/Move()
..()
var/turf/location = get_turf(src)
if(location)
+2 -2
View File
@@ -287,7 +287,7 @@
Range()
sleep(max(1, speed))
obj/item/projectile/proc/reflect_back(atom/source, list/position_modifiers = list(0, 0, 0, 0, 0, -1, 1, -2, 2))
/obj/item/projectile/proc/reflect_back(atom/source, list/position_modifiers = list(0, 0, 0, 0, 0, -1, 1, -2, 2))
if(starting)
var/new_x = starting.x + pick(position_modifiers)
var/new_y = starting.y + pick(position_modifiers)
@@ -306,7 +306,7 @@ obj/item/projectile/proc/reflect_back(atom/source, list/position_modifiers = lis
xo = new_x - curloc.x
Angle = null // Will be calculated in fire()
obj/item/projectile/Crossed(atom/movable/AM, oldloc) //A mob moving on a tile with a projectile is hit by it.
/obj/item/projectile/Crossed(atom/movable/AM, oldloc) //A mob moving on a tile with a projectile is hit by it.
..()
if(isliving(AM) && AM.density && !checkpass(PASSMOB))
Bump(AM, 1)
+1 -1
View File
@@ -39,7 +39,7 @@
reagents.add_reagent("blood", disease_amount, data)
add_initial_reagents()
obj/item/reagent_containers/proc/add_initial_reagents()
/obj/item/reagent_containers/proc/add_initial_reagents()
if(list_reagents)
reagents.add_reagent_list(list_reagents)
+1 -1
View File
@@ -156,7 +156,7 @@
else
return ..()
obj/structure/reagent_dispensers/fueltank/welder_act(mob/user, obj/item/I)
/obj/structure/reagent_dispensers/fueltank/welder_act(mob/user, obj/item/I)
. = TRUE
if(!reagents.has_reagent("fuel"))
to_chat(user, "<span class='warning'>[src] is out of fuel!</span>")
+5 -5
View File
@@ -335,7 +335,7 @@ GLOBAL_DATUM(blackbox, /obj/machinery/blackbox_recorder)
return FALSE // don't fuck with the stupid blackbox shit
proc/feedback_set(var/variable,var/value)
/proc/feedback_set(var/variable,var/value)
if(IsAdminAdvancedProcCall())
to_chat(usr, "<span class='boldannounce'>Feedback edit blocked: Advanced ProcCall detected.</span>")
message_admins("[key_name(usr)] attempted to edit feedback data via advanced proc-call")
@@ -351,7 +351,7 @@ proc/feedback_set(var/variable,var/value)
FV.set_value(value)
proc/feedback_inc(var/variable,var/value)
/proc/feedback_inc(var/variable,var/value)
if(IsAdminAdvancedProcCall())
to_chat(usr, "<span class='boldannounce'>Feedback edit blocked: Advanced ProcCall detected.</span>")
message_admins("[key_name(usr)] attempted to edit feedback data via advanced proc-call")
@@ -367,7 +367,7 @@ proc/feedback_inc(var/variable,var/value)
FV.inc(value)
proc/feedback_dec(var/variable,var/value)
/proc/feedback_dec(var/variable,var/value)
if(IsAdminAdvancedProcCall())
to_chat(usr, "<span class='boldannounce'>Feedback edit blocked: Advanced ProcCall detected.</span>")
message_admins("[key_name(usr)] attempted to edit feedback data via advanced proc-call")
@@ -383,7 +383,7 @@ proc/feedback_dec(var/variable,var/value)
FV.dec(value)
proc/feedback_set_details(var/variable,var/details)
/proc/feedback_set_details(var/variable,var/details)
if(IsAdminAdvancedProcCall())
to_chat(usr, "<span class='boldannounce'>Feedback edit blocked: Advanced ProcCall detected.</span>")
message_admins("[key_name(usr)] attempted to edit feedback data via advanced proc-call")
@@ -400,7 +400,7 @@ proc/feedback_set_details(var/variable,var/details)
FV.set_details(details)
proc/feedback_add_details(var/variable,var/details)
/proc/feedback_add_details(var/variable,var/details)
if(IsAdminAdvancedProcCall())
to_chat(usr, "<span class='boldannounce'>Feedback edit blocked: Advanced ProcCall detected.</span>")
message_admins("[key_name(usr)] attempted to edit feedback data via advanced proc-call")
+4 -4
View File
@@ -222,7 +222,7 @@
// EOF
)
spawn_result(mob/user as mob)
..()
feedback_inc("spacepod_created",1)
return
/datum/construction/reversible2/pod/spawn_result(mob/user as mob)
..()
feedback_inc("spacepod_created",1)
return
+2 -2
View File
@@ -30,7 +30,7 @@
// message is the custom message to be displayed
mob/living/carbon/human/proc/custom_pain(message)
/mob/living/carbon/human/proc/custom_pain(message)
if(stat >= UNCONSCIOUS)
return
@@ -49,7 +49,7 @@ mob/living/carbon/human/proc/custom_pain(message)
to_chat(src, msg)
next_pain_time = world.time + 100
mob/living/carbon/human/proc/handle_pain()
/mob/living/carbon/human/proc/handle_pain()
// not when sleeping
if(stat >= UNCONSCIOUS)