From 2269dbd9eff5717874e8a8578ee66a4e95782075 Mon Sep 17 00:00:00 2001 From: Gboster-0 <82319946+Gboster-0@users.noreply.github.com> Date: Sat, 8 Jun 2024 21:06:30 +0200 Subject: [PATCH 01/46] initial commit --- code/__DEFINES/achievements.dm | 2 + code/__DEFINES/logging.dm | 4 +- code/__DEFINES/~monkestation/NTSL.dm | 5 + code/datums/chatmessage.dm | 5 + .../machinery/telecomms/machines/server.dm | 7 + .../machinery/telecomms/telecomunications.dm | 5 + interface/skin.dmf | 112 +++- .../code/modules/NTSL/code/achievements.dm | 9 + .../code/coding_language/AST/ast_nodes.dm | 166 ++++++ .../NTSL/code/coding_language/AST/block.dm | 42 ++ .../AST/operators/binary_operators.dm | 166 ++++++ .../AST/operators/unary_operators.dm | 41 ++ .../code/coding_language/AST/statement.dm | 95 ++++ .../NTSL/code/coding_language/client_verbs.dm | 241 +++++++++ .../NTSL/code/coding_language/errors.dm | 183 +++++++ .../coding_language/implementations/logic.dm | 405 ++++++++++++++ .../implementations/telecomms_translator.dm | 510 ++++++++++++++++++ .../coding_language/interpreter/evaluation.dm | 262 +++++++++ .../interpreter/interaction.dm | 106 ++++ .../interpreter/interpreter.dm | 251 +++++++++ .../coding_language/interpreter/objects.dm | 230 ++++++++ .../code/coding_language/interpreter/scope.dm | 80 +++ .../NTSL/code/coding_language/options.dm | 119 ++++ .../coding_language/parser/expressions.dm | 341 ++++++++++++ .../code/coding_language/parser/keywords.dm | 222 ++++++++ .../code/coding_language/parser/parser.dm | 88 +++ .../code/coding_language/scanner/scanner.dm | 202 +++++++ .../code/coding_language/scanner/token.dm | 32 ++ .../NTSL/code/coding_language/stack.dm | 25 + monkestation/code/modules/NTSL/code/global.dm | 1 + .../code/modules/NTSL/code/logging.dm | 6 + .../modules/NTSL/code/machinery/overrides.dm | 7 + .../modules/NTSL/code/machinery/server.dm | 92 ++++ .../NTSL/code/machinery/traffic_control.dm | 335 ++++++++++++ .../code/modules/NTSL/code/misc_procs.dm | 55 ++ monkestation/code/modules/NTSL/code/readme.md | 29 + tgstation.dme | 29 + 37 files changed, 4500 insertions(+), 10 deletions(-) create mode 100644 code/__DEFINES/~monkestation/NTSL.dm create mode 100644 monkestation/code/modules/NTSL/code/achievements.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/AST/ast_nodes.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/AST/block.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/AST/operators/binary_operators.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/AST/operators/unary_operators.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/AST/statement.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/client_verbs.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/errors.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/implementations/logic.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/implementations/telecomms_translator.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/interpreter/evaluation.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/interpreter/interaction.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/interpreter/interpreter.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/interpreter/objects.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/interpreter/scope.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/options.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/parser/expressions.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/parser/keywords.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/parser/parser.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/scanner/scanner.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/scanner/token.dm create mode 100644 monkestation/code/modules/NTSL/code/coding_language/stack.dm create mode 100644 monkestation/code/modules/NTSL/code/global.dm create mode 100644 monkestation/code/modules/NTSL/code/logging.dm create mode 100644 monkestation/code/modules/NTSL/code/machinery/overrides.dm create mode 100644 monkestation/code/modules/NTSL/code/machinery/server.dm create mode 100644 monkestation/code/modules/NTSL/code/machinery/traffic_control.dm create mode 100644 monkestation/code/modules/NTSL/code/misc_procs.dm create mode 100644 monkestation/code/modules/NTSL/code/readme.md diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm index 0dd53a28315d..0878d283fe34 100644 --- a/code/__DEFINES/achievements.dm +++ b/code/__DEFINES/achievements.dm @@ -58,6 +58,8 @@ #define MEDAL_ARCHMAGE "Archmage" #define MEDAL_THEORETICAL_LIMITS "All Within Theoretical Limits" #define MEDAL_JARED_LETO "Jared Leto" // Monkestation addition +#define MEDAL_GOOD_BIRD "Embrace The Bird" // MONKESTATION ADDITION: NTSL +#define MEDAL_BAD_BIRD "Silence Bird" // MONKESTATION ADDITION: NTSL //Skill medal hub IDs #define MEDAL_LEGENDARY_MINER "Legendary Miner" diff --git a/code/__DEFINES/logging.dm b/code/__DEFINES/logging.dm index 172f2cdf4682..49f1fc00a3dd 100644 --- a/code/__DEFINES/logging.dm +++ b/code/__DEFINES/logging.dm @@ -50,7 +50,8 @@ #define LOG_SPEECH_INDICATORS (1 << 21) #define LOG_CLONING (1 << 22) #define LOG_MECHCOMP (1 << 23) -#define LOG_BLACKMARKET (1 << 24) +#define LOG_NTSL (1 << 24) // MONKESTATION ADDITION: NTSL +#define LOG_BLACKMARKET (1 << 25) //Individual logging panel pages #define INDIVIDUAL_GAME_LOG (LOG_GAME) @@ -113,6 +114,7 @@ #define LOG_CATEGORY_TOOL "tool" #define LOG_CATEGORY_VIRUS "virus" #define LOG_CATEGORY_MECHCOMP "mechcomp" +#define LOG_CATEGORY_NTSL "ntsl" // MONKESTATION ADDITION: NTSL #define LOG_CATEGORY_CLONING "cloning" #define LOG_CATEGORY_MUSIC "music" #define LOG_CATEGORY_META "currency" diff --git a/code/__DEFINES/~monkestation/NTSL.dm b/code/__DEFINES/~monkestation/NTSL.dm new file mode 100644 index 000000000000..bbcf4f35641d --- /dev/null +++ b/code/__DEFINES/~monkestation/NTSL.dm @@ -0,0 +1,5 @@ +#define SERVER_LOG_STORAGE_MAX 400 // Number of chat logs the telecomms servers will store before they start deleting the older ones. +#define TELECOMMS_SCAN_RANGE 25 // The range at which the telecomms computers can scan for telecomm servers. + +///If something is an 'object' to scripting. +#define IS_OBJECT(thing) (istype(thing, /datum) || istype(thing, /list) || istype(thing, /savefile) || istype(thing, /client) || (thing==world)) diff --git a/code/datums/chatmessage.dm b/code/datums/chatmessage.dm index 804562afe277..e77cce686506 100644 --- a/code/datums/chatmessage.dm +++ b/code/datums/chatmessage.dm @@ -307,6 +307,11 @@ // Ensure the list we are using, if present, is a copy so we don't modify the list provided to us spans = spans ? spans.Copy() : list() + // MONKESTATION ADDITION START -- NTSL -- doesn't pass a speaker when you do broadcast() since technically nothing is actually speaking. + if(!speaker) + return + // MONKESTATION ADDITION END + // Check for virtual speakers (aka hearing a message through a radio) var/atom/movable/originalSpeaker = speaker if (istype(speaker, /atom/movable/virtualspeaker)) diff --git a/code/game/machinery/telecomms/machines/server.dm b/code/game/machinery/telecomms/machines/server.dm index 4bcc2c70a731..9b02e15dd2b0 100644 --- a/code/game/machinery/telecomms/machines/server.dm +++ b/code/game/machinery/telecomms/machines/server.dm @@ -28,6 +28,8 @@ if (log_entries.len >= 400) log_entries.Cut(1, 2) + signal.data["server"] = src; // MONKESTATION ADDITION -- NTSL + // Don't create a log if the frequency is banned from being logged if(!(signal.frequency in banned_frequencies)) var/datum/comm_log_entry/log = new @@ -51,6 +53,11 @@ log.name = "data packet ([md5(identifier)])" log_entries.Add(log) + // MONKESTATION ADDITION START -- NTSL -- Run the damn NTSL code + if(Compiler && autoruncode) + Compiler.Run(signal) + // MONKESTATION ADDITION END + var/can_send = relay_information(signal, /obj/machinery/telecomms/hub) if(!can_send) relay_information(signal, /obj/machinery/telecomms/broadcaster) diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 95d5ca581ca4..c258c7dc79fc 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -56,6 +56,11 @@ GLOBAL_LIST_EMPTY(telecomms_list) if(!on) return + // MONKESTATION ADDITION START -- NTSL -- Make sure the NTSL actually has a path + if(filter && !ispath(filter)) + CRASH("relay_information() was given a path filter that wasn't actually a path!") + // MONKESTATION ADDITION END + if(!filter || !ispath(filter, /obj/machinery/telecomms)) CRASH("null or non /obj/machinery/telecomms typepath given as the filter argument! given typepath: [filter]") diff --git a/interface/skin.dmf b/interface/skin.dmf index 58cf103fb029..b220c84a9eb8 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -10,21 +10,21 @@ macro "default" menu "menu" - elem + elem name = "&File" command = "" saved-params = "is-checked" - elem + elem name = "&Quick screenshot\tF2" command = ".screenshot auto" category = "&File" saved-params = "is-checked" - elem + elem name = "&Save screenshot as...\tShift+F2" command = ".screenshot" category = "&File" saved-params = "is-checked" - elem + elem name = "" command = "" category = "&File" @@ -34,7 +34,7 @@ menu "menu" command = ".reconnect" category = "&File" saved-params = "is-checked" - elem + elem name = "&Quit\tAlt-F4" command = ".quit" category = "&File" @@ -43,22 +43,22 @@ menu "menu" name = "&Help" command = "" saved-params = "is-checked" - elem + elem name = "&Admin Help\tF1" command = "adminhelp" category = "&Help" saved-params = "is-checked" - elem + elem name = "&Hotkeys" command = "Hotkeys-Help" category = "&Help" saved-params = "is-checked" - elem + elem name = "Refresh TGUI" command = "refresh-tgui" category = "&Help" saved-params = "is-checked" - elem + elem name = "Fix Chat" command = "fix-chat" category = "&Help" @@ -369,3 +369,97 @@ window "tgui_say" anchor2 = 0,0 saved-params = "" +window "Telecomms IDE" + elem "Telecomms IDE" + type = MAIN + pos = 281,0 + size = 569x582 + anchor1 = none + anchor2 = none + text-color = #eeeeee + background-color = #222222 + is-visible = false + saved-params = "pos;size;is-minimized;is-maximized" + title = "TCS IDE" + statusbar = false + on-close = "exittcs" + elem "button5" + type = BUTTON + pos = 209,464 + size = 70x20 + anchor1 = 37,80 + anchor2 = 49,83 + text-color = #eeeeee + background-color = #555555 + saved-params = "is-checked" + text = "Clear Memory" + command = "tcsclearmem" + elem "button4" + type = BUTTON + pos = 157,464 + size = 52x20 + anchor1 = 28,80 + anchor2 = 37,83 + text-color = #eeeeee + background-color = #555555 + saved-params = "is-checked" + text = "Revert" + command = "tcsrevert" + elem "button3" + type = BUTTON + pos = 105,464 + size = 52x20 + anchor1 = 18,80 + anchor2 = 28,83 + text-color = #eeeeee + background-color = #555555 + saved-params = "is-checked" + text = "Execute" + command = "tcsrun" + elem "tcserror" + type = OUTPUT + pos = 0,488 + size = 566x94 + anchor1 = 0,84 + anchor2 = 99,100 + font-family = "sans-serif" + font-size = 9 + text-color = #eeeeee + background-color = #333334 + saved-params = "max-lines" + elem "button2" + type = BUTTON + pos = 53,464 + size = 52x20 + anchor1 = 9,80 + anchor2 = 18,83 + text-color = #eeeeee + background-color = #555555 + saved-params = "is-checked" + text = "Compile" + command = "tcscompile" + elem "button1" + type = BUTTON + pos = 0,464 + size = 53x20 + anchor1 = 0,80 + anchor2 = 9,83 + text-color = #eeeeee + background-color = #555555 + saved-params = "is-checked" + text = "Save" + command = "tcssave" + elem "tcscode" + type = INPUT + pos = 0,0 + size = 569x464 + anchor1 = 0,0 + anchor2 = 100,80 + font-family = "Courier" + font-size = 10 + text-color = #eeeeee + background-color = #333334 + saved-params = "" + command = "cancel" + multi-line = true + no-command = true diff --git a/monkestation/code/modules/NTSL/code/achievements.dm b/monkestation/code/modules/NTSL/code/achievements.dm new file mode 100644 index 000000000000..ac5a03ecf713 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/achievements.dm @@ -0,0 +1,9 @@ +/datum/award/achievement/jobs/Poly_silent + name = "Silence Bird!" + desc = "As a signal technician create a script that mutes poly" + database_id = MEDAL_BAD_BIRD + +/datum/award/achievement/jobs/Poly_loud + name = "Embrace The Bird!" + desc = "As a signal technician create a script that makes poly LOUD" + database_id = MEDAL_GOOD_BIRD diff --git a/monkestation/code/modules/NTSL/code/coding_language/AST/ast_nodes.dm b/monkestation/code/modules/NTSL/code/coding_language/AST/ast_nodes.dm new file mode 100644 index 000000000000..2a332329232e --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/AST/ast_nodes.dm @@ -0,0 +1,166 @@ +/** + * An abstract syntax tree (AST) is a representation of source code in a computer-friendly format. It is composed of nodes, + * each of which represents a certain part of the source code. For example, an node represents an if statement in the + * script's source code. Because it is a representation of the source code in memory, it is independent of any specific scripting language. + * This allows a script in any language for which a parser exists to be run by the interpreter. + * + * The AST is produced by an object. It consists of a with an arbitrary amount of statements. These statements are + * run in order by an object. A statement may in turn run another block (such as an if statement might if its condition is + * met). + * + * Articles: + * - + */ + +/** + * Macros: Operator Precedence + * The higher the value, the lower the priority in the precedence. + */ +#define OOP_ASSIGN 0 +///Logical or || +#define OOP_OR 1 +///Logical and && +#define OOP_AND 2 +///Bitwise operations &, | +#define OOP_BIT 3 +///Equality checks ==, != +#define OOP_EQUAL 4 +///Greater than, less than, etc >, <, >=, <= +#define OOP_COMPARE 5 +///Addition and subtraction + - +#define OOP_ADD 6 +///Multiplication and division * / % +#define OOP_MULTIPLY 7 +///Exponents ^ +#define OOP_POW 8 +///Unary Operators ! +#define OOP_UNARY 9 +///Parenthesis () +#define OOP_GROUP 10 + +/** + * Node + */ +/datum/node + ///Returns line number information + var/datum/token/token + +/datum/node/proc/ToString() + return "[type]" + +/* + * identifier + */ +/datum/node/identifier + var/id_name + +/datum/node/identifier/New(id, token) + . = ..() + src.id_name = id + src.token = token + +/datum/node/identifier/ToString() + return id_name + +/* + * expression + */ +/datum/node/expression +/* + * operator + * See and for subtypes. + */ +/datum/node/expression/expression_operator + var/datum/node/expression/exp + var/tmp/name + var/tmp/precedence + +/datum/node/expression/expression_operator/New(token, exp) + . = ..() + if(!name) + name = "[type]" + src.token = token + src.exp = exp + +/datum/node/expression/expression_operator/ToString() + return "operator: [name]" + +/datum/node/expression/member + var/datum/node/expression/object + var/tmp/temp_object // so you can pre-eval it, used for function calls and assignments + +/datum/node/expression/member/New(token) + src.token = token + return ..() + +/datum/node/expression/member/dot + var/datum/node/identifier/id + +/datum/node/expression/member/brackets + var/datum/node/expression/index + var/tmp/temp_index + + +/* + * FunctionCall + */ +/datum/node/expression/FunctionCall + //Function calls can also be expressions or statements. + var/datum/node/expression/function + var/list/parameters = list() + +/datum/node/expression/FunctionCall/New(token) + . = ..() + src.token = token + +/* + * literal + */ +/datum/node/expression/value/literal + var/value + +/datum/node/expression/value/literal/New(value) + . = ..() + src.value = value + +/datum/node/expression/value/literal/ToString() + return value + +/* + * Variable + */ +/datum/node/expression/value/variable + ///Either a node/identifier or another node/expression/value/variable which points to the object + var/datum/node/object + var/datum/node/identifier/id + +/datum/node/expression/value/variable/New(datum/node/identifier/ident, datum/token/token) + . = ..() + src.token = token + src.id = ident + if(istext(id)) + src.id = new(id) + +/datum/node/expression/value/variable/ToString() + return id.ToString() + +/datum/node/expression/value/list_init + var/list/init_list + +/datum/node/expression/value/list_init/New(datum/token/token) + . = ..() + src.token = token + +/** + * Reference + */ +/datum/node/expression/value/reference + var/datum/value + +/datum/node/expression/value/reference/New(value, datum/token/token) + . = ..() + src.token = token + src.value = value + +/datum/node/expression/value/reference/ToString() + return "ref: [value] ([value.type])" diff --git a/monkestation/code/modules/NTSL/code/coding_language/AST/block.dm b/monkestation/code/modules/NTSL/code/coding_language/AST/block.dm new file mode 100644 index 000000000000..2098c42c5f4b --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/AST/block.dm @@ -0,0 +1,42 @@ +/* + * BlockDefinition + * An object representing a set of actions to perform independently from the rest of the script. Blocks are basically just + * lists of statements to execute which also contain some local variables and methods. Note that since functions are local to a block, + * it is possible to have a function definition inside of any type of block (such as in an if statement or another function), + * and not just in the global scope as in many languages. + */ +/datum/node/BlockDefinition + var/list/statements = new + var/list/functions = new + var/list/initial_variables = new + +/** + * SetVar + * Defines a permanent variable. The variable will not be deleted when it goes out of scope. + * + * Notes: + * Since all pre-existing temporary variables are deleted, + * it is not generally desirable to use this proc after the interpreter has been instantiated. + * Instead, use . + * + * See Also: + * - + */ +/datum/node/BlockDefinition/proc/SetVar(name, value) + initial_variables[name] = value + +/** + * Globalblock + * A block object representing the global scope + */ +/datum/node/BlockDefinition/GlobalBlock + +/datum/node/BlockDefinition/GlobalBlock/New() + initial_variables["null"] = null + return ..() + +/** + * FunctionBlock + * A block representing a function body. + */ +/datum/node/BlockDefinition/FunctionBlock diff --git a/monkestation/code/modules/NTSL/code/coding_language/AST/operators/binary_operators.dm b/monkestation/code/modules/NTSL/code/coding_language/AST/operators/binary_operators.dm new file mode 100644 index 000000000000..1475c6cdd1ab --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/AST/operators/binary_operators.dm @@ -0,0 +1,166 @@ +/* + * binary + * Represents a binary operator in the AST. A binary operator takes two operands (ie x and y) and returns a value. + */ +/datum/node/expression/expression_operator/binary + var/datum/node/expression/exp2 + +/** + * Equal + * Returns TRUE if x == y + */ +/datum/node/expression/expression_operator/binary/Equal + precedence = OOP_EQUAL + +/** + * NotEqual + * + * Returns TRUE if x != y + */ +/datum/node/expression/expression_operator/binary/NotEqual + precedence = OOP_EQUAL + +/** + * Greater + * Returns TRUE if x > y + */ +/datum/node/expression/expression_operator/binary/Greater + precedence = OOP_COMPARE + +/** + * Less + * Returns TRUE if x < y + */ +/datum/node/expression/expression_operator/binary/Less + precedence = OOP_COMPARE + +/** + * GreaterOrEqual + * Returns TRUE if x >= y + */ +/datum/node/expression/expression_operator/binary/GreaterOrEqual + precedence = OOP_COMPARE + +/** + * LessOrEqual + * Returns TRUE if x <= y + */ +/datum/node/expression/expression_operator/binary/LessOrEqual + precedence = OOP_COMPARE + + +/** + * LogicalAnd + * Returns TRUE if x and y are TRUE + */ +/datum/node/expression/expression_operator/binary/LogicalAnd + precedence = OOP_AND + +/** + * LogicalOr + * Returns TRUE if x and/or y are TRUE + */ +/datum/node/expression/expression_operator/binary/LogicalOr + precedence = OOP_OR + +/** + * LogicalXor + * Returns TRUE if either x or y are TRUE, but not both. + * Not implemented in nS + */ +/datum/node/expression/expression_operator/binary/LogicalXor + precedence = OOP_OR + + +/** + * BitwiseAnd + * Performs a Bitwise operation + * + * Example: 011 & 110 = 010 + */ +/datum/node/expression/expression_operator/binary/BitwiseAnd + precedence = OOP_BIT + +/** + * BitwiseOr + * Performs a bitwise or operation + * + * Example: 011 | 110 = 111 + */ +/datum/node/expression/expression_operator/binary/BitwiseOr + precedence = OOP_BIT + +/** + * BitwiseXor + * Performs a bitwise exclusive or operation + * + * Example: 011 xor 110 = 101 + */ +/datum/node/expression/expression_operator/binary/BitwiseXor + precedence = OOP_BIT + +/** + * Add + * Returns the sum of x and y + */ +/datum/node/expression/expression_operator/binary/Add + precedence = OOP_ADD + +/** + * Substract + * Returns the difference of x and y + */ +/datum/node/expression/expression_operator/binary/Subtract + precedence = OOP_ADD + +/** + * Multiply + * Returns the product of x and y + */ +/datum/node/expression/expression_operator/binary/Multiply + precedence = OOP_MULTIPLY + +/** + * Divide + * Returns the quotient of x and y + */ +/datum/node/expression/expression_operator/binary/Divide + precedence = OOP_MULTIPLY + +/** + * Power + * Returns x raised to the power of y + */ +/datum/node/expression/expression_operator/binary/Power + precedence = OOP_POW + +/** + * Modulo + * Returns the remainder of x / y + */ +/datum/node/expression/expression_operator/binary/Modulo + precedence = OOP_MULTIPLY + +/** + * Assign + */ +/datum/node/expression/expression_operator/binary/Assign + precedence = OOP_ASSIGN + +/datum/node/expression/expression_operator/binary/Assign/BitwiseAnd + +/datum/node/expression/expression_operator/binary/Assign/BitwiseOr + +/datum/node/expression/expression_operator/binary/Assign/BitwiseXor + +/datum/node/expression/expression_operator/binary/Assign/Add + +/datum/node/expression/expression_operator/binary/Assign/Subtract + +/datum/node/expression/expression_operator/binary/Assign/Multiply + +/datum/node/expression/expression_operator/binary/Assign/Divide + +/datum/node/expression/expression_operator/binary/Assign/Power + +/datum/node/expression/expression_operator/binary/Assign/Modulo diff --git a/monkestation/code/modules/NTSL/code/coding_language/AST/operators/unary_operators.dm b/monkestation/code/modules/NTSL/code/coding_language/AST/operators/unary_operators.dm new file mode 100644 index 000000000000..b3927f35b010 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/AST/operators/unary_operators.dm @@ -0,0 +1,41 @@ +/** + * Unary Operators + * + * Unary + * Represents a Unary operator in the AST. + * Unary operators take a single operand (referred to as 'x' below) and returns a value. + */ +/datum/node/expression/expression_operator/unary + precedence = OOP_UNARY + +/** + * LogicalNot + * Returns !x + * + * Ex: !TRUE = FALSE and !FALSE = TRUE + */ +/datum/node/expression/expression_operator/unary/LogicalNot + name = "logical not" + +/** + * BitwiseNot + * Returns the value of a bitwise not operation performed on x + * + * Ex: ~10 (decimal 2) = 01 (decimal 1) + */ +/datum/node/expression/expression_operator/unary/BitwiseNot + name = "bitwise not" + +/** + * Minus + * Returns -x + */ +/datum/node/expression/expression_operator/unary/Minus + name = "minus" + +/** + * Group + * A special unary operator representing a value in parentheses. + */ +/datum/node/expression/expression_operator/unary/group + precedence = OOP_GROUP diff --git a/monkestation/code/modules/NTSL/code/coding_language/AST/statement.dm b/monkestation/code/modules/NTSL/code/coding_language/AST/statement.dm new file mode 100644 index 000000000000..b881f373603e --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/AST/statement.dm @@ -0,0 +1,95 @@ +/* + * Statement + * An object representing a single instruction run by an interpreter. + */ +/datum/node/statement + +/datum/node/statement/New(datum/token/token) + . = ..() + src.token = token + +/* + * FunctionDefinition + * Defines a function. + */ +/datum/node/statement/FunctionDefinition + var/func_name + var/list/parameters = new + var/datum/node/BlockDefinition/FunctionBlock/block + +/* + * VariableAssignment + * Sets a variable in an accessible scope to the given value if one exists, otherwise initializes a new local variable to the given value. + * + * Notes: + * If a variable with the same name exists in a higher block, the value will be assigned to it. If not, + * a new variable is created in the current block. To force creation of a new variable, use . + * + * See Also: + * - + */ +/datum/node/statement/VariableAssignment + var/datum/node/identifier/object + var/datum/node/identifier/var_name + var/datum/node/expression/value + +/* + * VariableDeclaration + * Intializes a local variable to a null value. + * + * See Also: + * - + */ +/datum/node/statement/VariableDeclaration + var/datum/node/identifier/object + var/datum/node/identifier/var_name + +/** + * IfStatement + */ +/datum/node/statement/IfStatement + var/skip = 0 + var/datum/node/BlockDefinition/block + var/datum/node/BlockDefinition/else_block //can be null + var/datum/node/expression/cond + var/datum/node/statement/else_if + +/datum/node/statement/IfStatement/ElseIf + + +/** + * WhileLoop + * Loops while a given condition is TRUE. + */ +/datum/node/statement/WhileLoop + var/datum/node/BlockDefinition/block + var/datum/node/expression/cond + +/* + * ForLoop + * Loops while test is true, initializing a variable, increasing the variable + */ +/datum/node/statement/ForLoop + var/datum/node/BlockDefinition/block + var/datum/node/expression/test + var/datum/node/expression/init + var/datum/node/expression/increment + +/* + * BreakStatement + * Ends a loop. + */ +/datum/node/statement/BreakStatement + +/* + * ContinueStatement + * Skips to the next iteration of a loop. + */ +/datum/node/statement/ContinueStatement + +/* + * ReturnStatement + * Ends the function and returns a value. + */ +/datum/node/statement/ReturnStatement + var/datum/node/expression/value diff --git a/monkestation/code/modules/NTSL/code/coding_language/client_verbs.dm b/monkestation/code/modules/NTSL/code/coding_language/client_verbs.dm new file mode 100644 index 000000000000..a832e1c57fd5 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/client_verbs.dm @@ -0,0 +1,241 @@ +/client/verb/tcssave() + set hidden = 1 + + if(is_banned_from(usr.ckey, "Network Admin")) + to_chat(usr, span_warning("You are banned from using NTSL.")) + return + if(!mob.machine && !issilicon(mob)) + src << output(null, "tcserror") + src << output("Failed to save: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") + if(!telecomms_check(mob)) + src << output(null, "tcserror") + src << output("Failed to save: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") + return + var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine + if(Machine.editingcode != mob) + return + + if(Machine.SelectedServer) + var/obj/machinery/telecomms/server/Server = Machine.SelectedServer + var/tcscode=winget(src, "tcscode", "text") + Server.setcode( tcscode ) // this actually saves the code from input to the server + src << output(null, "tcserror") // clear the errors + else + src << output(null, "tcserror") + src << output("Failed to save: Unable to locate server machine. (Back up your code before exiting the window!)", "tcserror") + +/client/verb/tcscompile() + set hidden = 1 + + if(is_banned_from(usr.ckey, "Network Admin")) + to_chat(usr, span_warning("You are banned from using NTSL.")) + return + if(!mob.machine && !issilicon(mob)) + src << output(null, "tcserror") + src << output("Failed to compile: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") + return + if(!telecomms_check(mob)) + src << output(null, "tcserror") + src << output("Failed to compile: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") + return + var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine + if(Machine.editingcode != mob) + return + if(!Machine.SelectedServer) + src << output(null, "tcserror") + src << output("Failed to compile: Unable to locate server machine. (Back up your code before exiting the window!)", "tcserror") + return + + var/obj/machinery/telecomms/server/Server = Machine.SelectedServer + Server.setcode( winget(src, "tcscode", "text") ) // save code first + + spawn(0) + // Output all the compile-time errors + src << output(null, "tcserror") + src << output("Compiling on [Server.name]...", "tcserror") + + var/list/compileerrors = Server.compile(mob) // then compile the code! this can return a string or a list. + if(!telecomms_check(mob)) + return + + if(!compileerrors) + src << output("NTSL.exe Error", "tcserror") + src << output("\t>A fatal error has occured. Please contact your local network adminstrator.", "tcserror") + else if(istext(compileerrors)) + src << output("NTSL.exe Error", "tcserror") + src << output("\t>[compileerrors]", "tcserror") + else if(length(compileerrors)) + src << output("Compile Errors", "tcserror") + var/i = 1 + for(var/datum/scriptError/e in compileerrors) + if(i) //. Bold the first one, since it's probably important + src << output("\t>[e.message]", "tcserror") + i = 0 + else + src << output("\t>[e.message]", "tcserror") + src << output("([compileerrors.len] errors)", "tcserror") + + // Output compile errors to all other people viewing the code too + for(var/mob/M in Machine.viewingcode) + if(M.client) + M << output(null, "tcserror") + M << output("Compile Errors", "tcserror") + i = 1 //. Still using var/i from above + for(var/datum/scriptError/e in compileerrors) + if(i) + M << output("\t>[e.message]", "tcserror") + i = 0 + else + M << output("\t>[e.message]", "tcserror") + M << output("([compileerrors.len] errors)", "tcserror") + + + else // Returned a blank list, means no errors. + src << output("TCS compilation successful!", "tcserror") + src << output("Time of compile: [gameTimestamp("hh:mm:ss")]","tcserror") + //. ^ To make it obvious that it's done a new compile + src << output("(0 errors)", "tcserror") + + for(var/mob/M in Machine.viewingcode) + if(M.client) + M << output("TCS compilation successful!", "tcserror") + M << output("Time of compile: [gameTimestamp("hh:mm:ss")]","tcserror") + M << output("(0 errors)", "tcserror") + if(Server.compile_warnings.len) + src << output("Compile Warnings", "tcserror") + for(var/datum/scriptError/e in Server.compile_warnings) + src << output("\t>[e.message]", "tcserror") + src << output("([Server.compile_warnings.len] warnings)", "tcserror") + for(var/fuck_you_for_making_me_do_this_altoids in Machine.viewingcode) + var/mob/M = fuck_you_for_making_me_do_this_altoids + if(M.client) + M << output("Compile Warnings", "tcserror") + for(var/datum/scriptError/e in Server.compile_warnings) + M << output("\t>[e.message]", "tcserror") + M << output("([Server.compile_warnings.len] warnings)", "tcserror") + +/client/verb/tcsrun() + set hidden = 1 + + if(is_banned_from(usr.ckey, "Network Admin")) + to_chat(usr, span_warning("You are banned from using NTSL.")) + return + if(!mob.machine && !issilicon(mob)) + src << output(null, "tcserror") + src << output("Failed to run: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") + return + if(!telecomms_check(mob)) + src << output(null, "tcserror") + src << output("Failed to run: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") + return + var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine + if(Machine.editingcode != mob) + return + if(!Machine.SelectedServer) + src << output(null, "tcserror") + src << output("Failed to run: Unable to locate server machine. (Back up your code before exiting the window!)", "tcserror") + return + + var/obj/machinery/telecomms/server/Server = Machine.SelectedServer + var/datum/signal/signal = new() + signal.data["message"] = "" + if(Server.freq_listening.len > 0) + signal.frequency = Server.freq_listening[1] + else + signal.frequency = 1459 + signal.data["name"] = "" + signal.data["job"] = "" + signal.data["reject"] = FALSE + signal.data["server"] = Server + Server.Compiler.Run(signal) + +/client/verb/exittcs() + set hidden = 1 + + if(is_banned_from(usr.ckey, "Network Admin")) + to_chat(usr, span_warning("You are banned from using NTSL.")) + return + if(!mob.machine && !issilicon(mob)) + return + if(!telecomms_check(mob)) + return + var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine + if(Machine.editingcode == mob) + Machine.storedcode = "[winget(mob, "tcscode", "text")]" + Machine.editingcode = null + else if(mob in Machine.viewingcode) + Machine.viewingcode.Remove(mob) + +/client/verb/tcsrevert() + set hidden = 1 + + if(is_banned_from(usr.ckey, "Network Admin")) + to_chat(usr, span_warning("You are banned from using NTSL.")) + return + if(!mob.machine && !issilicon(mob)) + src << output(null, "tcserror") + src << output("Failed to revert: Unable to locate machine.", "tcserror") + return + if(!telecomms_check(mob)) + src << output(null, "tcserror") + src << output("Failed to revert: Unable to locate machine.", "tcserror") + return + var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine + if(Machine.editingcode != mob) + return + if(!Machine.SelectedServer) + src << output(null, "tcserror") + src << output("Failed to revert: Unable to locate server machine.", "tcserror") + return + + var/obj/machinery/telecomms/server/Server = Machine.SelectedServer + // Replace quotation marks with quotation macros for proper winset() compatibility + var/showcode = replacetext(Server.rawcode, "\\\"", "\\\\\"") + showcode = replacetext(showcode, "\"", "\\\"") + winset(mob, "tcscode", "text=\"[showcode]\"") + src << output(null, "tcserror") // clear the errors + +/client/verb/tcsclearmem() + set hidden = 1 + + if(is_banned_from(usr.ckey, "Network Admin")) + to_chat(usr, span_warning("You are banned from using NTSL.")) + return + if(!mob.machine && !issilicon(mob)) + src << output(null, "tcserror") + src << output("Failed to clear memory: Unable to locate machine.", "tcserror") + return + if(!telecomms_check(mob)) + src << output(null, "tcserror") + src << output("Failed to clear memory: Unable to locate machine.", "tcserror") + return + var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine + if(Machine.editingcode != mob) + return + if(!Machine.SelectedServer) + src << output(null, "tcserror") + src << output("Failed to clear memory: Unable to locate server machine.", "tcserror") + return + + var/obj/machinery/telecomms/server/Server = Machine.SelectedServer + Server.memory = list() // clear the memory + // Show results + //// Write shitty code comments + src << output(null, "tcserror") + src << output("Server memory cleared!", "tcserror") + for(var/mob/M in Machine.viewingcode) + if(M.client) + M << output("Server memory cleared!", "tcserror") + +/** + * Checks to see if 'mob_checking''s machine is a traffic control computer they can access. + */ +/proc/telecomms_check(mob/mob_checking) + if(!mob_checking) + return FALSE + if(!istype(mob_checking.machine, /obj/machinery/computer/telecomms/traffic)) + return FALSE + if(!issilicon(mob_checking) && !in_range(mob_checking.machine, mob_checking)) + return FALSE + + return TRUE diff --git a/monkestation/code/modules/NTSL/code/coding_language/errors.dm b/monkestation/code/modules/NTSL/code/coding_language/errors.dm new file mode 100644 index 000000000000..78857c5a163b --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/errors.dm @@ -0,0 +1,183 @@ +/datum/scriptError + ///A message describing the problem. + var/message + +/datum/scriptError/New(msg) + if(msg) + message = msg + +/datum/scriptError/BadToken + message = "Unexpected token: " + var/datum/token/token + +/datum/scriptError/BadToken/New(datum/token/token) + src.token = token + + if(token && token.line) + message = "[token.line]: [message]" + if(istype(token)) + message += "[token.value]" + else + message += "[token]" + +/datum/scriptError/InvalidID + parent_type=/datum/scriptError/BadToken + message = "Invalid identifier name: " + +/datum/scriptError/ReservedWord + parent_type=/datum/scriptError/BadToken + message = "Identifer using reserved word: " + +/datum/scriptError/BadNumber + parent_type = /datum/scriptError/BadToken + message = "Bad number: " + +/datum/scriptError/BadReturn + message = "Unexpected return statement outside of a function." + var/datum/token/token + +/datum/scriptError/BadReturn/New(datum/token/token) + src.token = token + +/datum/scriptError/EndOfFile + message = "Unexpected end of file." + +/datum/scriptError/ExpectedToken + message = "Expected: " + +/datum/scriptError/ExpectedToken/New(id, datum/token/token) + if(token) + message = "[token.line ? token.line : "???"]: [message]'[id]'. Found '[token.value]'." + else + message = "???: [message]'[id]'. Token did not exist!" + +/datum/scriptError/UnterminatedComment + message = "Unterminated multi-line comment statement: expected */" + +/datum/scriptError/DuplicateFunction + +/datum/scriptError/DuplicateFunction/New(name, datum/token/token) + message = "Function '[name]' defined twice." + +/datum/scriptError/ParameterFunction + message = "You cannot use a function inside a parameter." + +/datum/scriptError/ParameterFunction/New(datum/token/token) + var/line = "???" + if(token) + line = token.line + message = "[line]: [message]" + +/datum/scriptError/InvalidAssignment + message = "Left side of assignment cannot be assigned to." + +/datum/scriptError/OutdatedScript + message = "Your script looks like it was for an older version of NTSL! Your script may not work as intended. See documentation for new syntax and API." + +/* + * Runtime Error + * An error thrown by the interpreter in running the script. + */ +/datum/runtimeError + var/name + ///A basic description as to what went wrong. + var/message + var/datum/scope/scope + var/datum/token/token + +///Returns a description of the error suitable for showing to the user. +/datum/runtimeError/proc/ToString() + . = "[name]: [message]" + if(!scope) + return + var/last_line + var/last_col + if(token) + last_line = token.line + last_col = token.column + var/datum/scope/cur_scope = scope + while(cur_scope) + if(cur_scope.function) + . += "\n\tat [cur_scope.function.func_name]([last_line]:[last_col])" + if(cur_scope.call_node && cur_scope.call_node.token) + last_line = cur_scope.call_node.token.line + last_col = cur_scope.call_node.token.column + else + last_line = null + last_col = null + cur_scope = cur_scope.parent + if(last_line) + . += "\n\tat \[global]([last_line]:[last_col])" + else + . += "\n\tat \[internal]" + +/datum/runtimeError/TypeMismatch + name = "TypeMismatchError" + +/datum/runtimeError/TypeMismatch/New(op, a, b) + if(isnull(a)) + a = "NULL" + if(isnull(b)) + b = "NULL" + message = "Type mismatch: '[a]' [op] '[b]'" + +/datum/runtimeError/UnexpectedReturn + name = "UnexpectedReturnError" + message = "Unexpected return statement." + +/datum/runtimeError/UnknownInstruction + name = "UnknownInstructionError" + +/datum/runtimeError/UnknownInstruction/New(datum/node/op) + message = "Unknown instruction type '[op.type]'. This may be due to incompatible compiler and interpreter versions or a lack of implementation." + +/datum/runtimeError/UndefinedVariable + name = "UndefinedVariableError" + +/datum/runtimeError/UndefinedVariable/New(variable) + message = "Variable '[variable]' has not been declared." + +/datum/runtimeError/IndexOutOfRange + name = "IndexOutOfRangeError" + +/datum/runtimeError/IndexOutOfRange/New(obj, idx) + message = "Index [obj]\[[idx]] is out of range." + +/datum/runtimeError/UndefinedFunction + name = "UndefinedFunctionError" + +/datum/runtimeError/UndefinedFunction/New(function) + message = "Function '[function]()' has not been defined." + +/datum/runtimeError/DuplicateVariableDeclaration + name = "DuplicateVariableError" + +/datum/runtimeError/DuplicateVariableDeclaration/New(variable) + message = "Variable '[variable]' was already declared." + +/datum/runtimeError/IterationLimitReached + name = "MaxIterationError" + message = "A loop has reached its maximum number of iterations." + +/datum/runtimeError/RecursionLimitReached + name = "MaxRecursionError" + message = "The maximum amount of recursion has been reached." + +/datum/runtimeError/DivisionByZero + name = "DivideByZeroError" + message = "Division by zero (or a NULL value) attempted." + +/datum/runtimeError/InvalidAssignment + message = "Left side of assignment cannot be assigned to." + +/datum/runtimeError/MaxCPU + name = "MaxComputationalUse" + +/datum/runtimeError/MaxCPU/New(maxcycles) + message = "Maximum amount of computational cycles reached (>= [maxcycles])." + +/datum/runtimeError/Internal + name = "InternalError" + +/datum/runtimeError/Internal/New(exception/exception_message) + message = exception_message.name diff --git a/monkestation/code/modules/NTSL/code/coding_language/implementations/logic.dm b/monkestation/code/modules/NTSL/code/coding_language/implementations/logic.dm new file mode 100644 index 000000000000..402e24a3b3d2 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/implementations/logic.dm @@ -0,0 +1,405 @@ +// Script -> BYOND code procs +#define SCRIPT_MAX_REPLACEMENTS_ALLOWED 200 + +/** + * List operations (lists known as vectors in n_script) + */ +/// Picks one random item from the list +/datum/n_function/default/pick + name = "pick" + +/datum/n_function/default/pick/execute(this_obj, list/params) + var/list/finalpick = list() + for(var/e in params) + if(IS_OBJECT(e)) + if(istype(e, /list)) + var/list/sublist = e + for(var/sube in sublist) + finalpick.Add(sube) + continue + finalpick.Add(e) + + return pick(finalpick) + +/** + * String methods + */ +///If list, finds a value in it, if text, finds a substring in it +/datum/n_function/default/find + name = "find" + +/datum/n_function/default/find/execute(this_obj, list/params) + var/haystack = params.len >= 1 ? params[1] : null + var/needle = params.len >= 2 ? params[2] : null + var/start = params.len >= 3 ? params[3] : 1 + var/end = params.len >= 4 ? params[4] : 0 + if(!haystack || !needle) + return + if(IS_OBJECT(haystack)) + if(!istype(haystack, /list)) + return + if(length(haystack) >= end && start > 0) + var/list/listhaystack = haystack + return listhaystack.Find(needle, start, end) + else if(istext(haystack)) + if(length(haystack) >= end && start > 0) + return findtext(haystack, needle, start, end) + +///Returns a substring of the string +/datum/n_function/default/substr + name = "substr" + +/datum/n_function/default/substr/execute(this_obj, list/params) + var/string = params.len >= 1 ? params[1] : null + var/start = params.len >= 2 ? params[2] : 1 + var/end = params.len >= 3 ? params[3] : 0 + if(istext(string) && isnum(start) && isnum(end)) + if(start > 0) + return copytext(string, start, end) + +///Returns the length of the string or list +/datum/n_function/default/length + name = "length" + +/datum/n_function/default/length/execute(this_obj, list/params) + var/container = params.len >= 1 ? params[1] : null + if(container) + if(istype(container, /list) || istext(container)) + return length(container) + return FALSE + +///Lowercase all characters +/datum/n_function/default/lower + name = "lower" + +/datum/n_function/default/lower/execute(this_obj, list/params) + var/string = params.len >= 1 ? params[1] : null + if(istext(string)) + return lowertext(string) + +///Uppercase all characters +/datum/n_function/default/upper + name = "upper" + +/datum/n_function/default/upper/execute(this_obj, list/params) + var/string = params.len >= 1 ? params[1] : null + if(istext(string)) + return uppertext(string) + +///Converts a string to a list +/datum/n_function/default/explode + name = "explode" + +/datum/n_function/default/explode/execute(this_obj, list/params) + var/string = params.len >= 1 ? params[1] : null + var/separator = params.len >= 2 ? params[2] : "" + if(istext(string) && (istext(separator) || isnull(separator))) + return splittext(string, separator) + +///Converts a list to a string +/datum/n_function/default/implode + name = "implode" + +/datum/n_function/default/implode/execute(this_obj, list/params) + var/list/li = LAZYACCESS(params, 1) + var/separator = LAZYACCESS(params, 2) + if(istype(li) && (istext(separator) || isnull(separator))) + return jointext(li, separator) + +///Repeats the string x times +/datum/n_function/default/repeat + name = "repeat" + +/datum/n_function/default/repeat/execute(this_obj, list/params) + var/string = params.len >= 1 ? params[1] : null + var/amount = params.len >= 2 ? params[2] : null + if(istext(string) && isnum(amount)) + var/i + var/newstring = "" + if(length(newstring) * amount >= 1000) + return + for(i = 0, i <= amount, i++) + if(i >= 1000) + break + newstring = newstring + string + + return newstring + +///Reverses the order of the string. "Clown" becomes "nwolC" +/datum/n_function/default/reverse + name = "reverse" + +/datum/n_function/default/reverse/execute(this_obj, list/params) + var/string = params.len >= 1 ? params[1] : null + if(istext(string)) + var/newstring = "" + var/i + for(i = length(string), i > 0, i--) + if(i >= 1000) + break + newstring = newstring + copytext(string, i, i+1) + + return newstring + +//Turns a String into a Number +/datum/n_function/default/tonum + name = "tonum" + +/datum/n_function/default/tonum/execute(this_obj, list/params) + var/string = params.len >= 1 ? params[1] : null + if(istext(string)) + return text2num(string) + +/datum/n_function/default/proper + name = "proper" + +/datum/n_function/default/proper/execute(this_obj, list/params) + var/string = params.len >= 1 ? params[1] : null + if(!istext(string)) + return "" + + return text("[][]", uppertext(copytext(string, 1, 2)), lowertext(copytext(string, 2))) + +/** + * Number methods + */ + +///Returns the highest value of the arguments +///Need custom functions here cause byond's min and max runtimes if you give them a string or list. +/datum/n_function/default/max + name = "max" + +/datum/n_function/default/max/execute(this_obj, list/params) + if(!params.len) + return FALSE + + var/max = params[1] + for(var/e in params) + if(isnum(e) && e > max) + max = e + + return max + +///Returns the lowest value of the arguments +/datum/n_function/default/min + name = "min" + +/datum/n_function/default/min/execute(this_obj, list/params) + if(!params.len) + return FALSE + + var/min = params[1] + for(var/e in params) + if(isnum(e) && e < min) + min = e + + return min + +/datum/n_function/default/prob + name = "prob" + +/datum/n_function/default/prob/execute(this_obj, list/params) + var/chance = params.len >= 1 ? params[1] : null + return prob(chance) + +/datum/n_function/default/randseed + name = "randseed" + +/datum/n_function/default/randseed/execute(this_obj, list/params) + //var/seed = params.len >= 1 ? params[1] : null + //rand_seed(seed) + +/datum/n_function/default/rand + name = "rand" + +/datum/n_function/default/rand/execute(this_obj, list/params) + var/low = params.len >= 1 ? params[1] : null + var/high = params.len >= 2 ? params[2] : null + if(isnull(low) && isnull(high)) + return rand() + + return rand(low, high) + +///Turns a Number into a String +/datum/n_function/default/tostring + name = "tostring" + +/datum/n_function/default/tostring/execute(this_obj, list/params) + var/num = params.len >= 1 ? params[1] : null + if(isnum(num)) + return num2text(num) + +// Squareroot +/datum/n_function/default/sqrt + name = "sqrt" + +/datum/n_function/default/sqrt/execute(this_obj, list/params) + var/num = params.len >= 1 ? params[1] : null + if(isnum(num)) + return sqrt(num) + +///Magnitude of a Number +/datum/n_function/default/abs + name = "abs" + +/datum/n_function/default/abs/execute(this_obj, list/params) + var/num = params.len >= 1 ? params[1] : null + if(isnum(num)) + return abs(num) + +///Rounds a number down +/datum/n_function/default/floor + name = "floor" + +/datum/n_function/default/floor/execute(this_obj, list/params) + var/num = params.len >= 1 ? params[1] : null + if(isnum(num)) + return round(num) + +///Rounds a number up +/datum/n_function/default/ceil + name = "ceil" + +/datum/n_function/default/ceil/execute(this_obj, list/params) + var/num = params.len >= 1 ? params[1] : null + if(isnum(num)) + return round(num)+1 + +///Rounds a number to its nearest integer +/datum/n_function/default/round + name = "round" + +/datum/n_function/default/round/execute(this_obj, list/params) + var/num = params.len >= 1 ? params[1] : null + if(isnum(num)) + if(num-round(num) < 0.5) + return round(num) + return round(num) + 1 + +/// Clamps a number between min and max +/datum/n_function/default/clamp + name = "clamp" + +/datum/n_function/default/clamp/execute(this_obj, list/params) + var/num = params.len >= 1 ? params[1] : null + var/min = params.len >= 2 ? params[2] : -1 + var/max = params.len >= 3 ? params[3] : 1 + if(isnum(num) && isnum(min) && isnum(max)) + if(num <= min) + return min + if(num >= max) + return max + return num + +///Returns TRUE if a number is inbetween Min and Max +/datum/n_function/default/inrange + name = "inrange" + +/datum/n_function/default/inrange/execute(this_obj, list/params) + var/num = params.len >= 1 ? params[1] : null + var/min = params.len >= 2 ? params[2] : -1 + var/max = params.len >= 3 ? params[3] : 1 + if(isnum(num)&&isnum(min)&&isnum(max)) + return ((min <= num) && (num <= max)) + +///Returns the sine of a number +/datum/n_function/default/sin + name = "sin" + +/datum/n_function/default/sin/execute(this_obj, list/params) + var/num = params.len >= 1 ? params[1] : null + if(isnum(num)) + return sin(num) + +///Returns the cosine of a number +/datum/n_function/default/cos + name = "cos" + +/datum/n_function/default/cos/execute(this_obj, list/params) + var/num = params.len >= 1 ? params[1] : null + if(isnum(num)) + return cos(num) + +///Returns the arcsine of a number +/datum/n_function/default/asin + name = "asin" + +/datum/n_function/default/asin/execute(this_obj, list/params) + var/num = params.len >= 1 ? params[1] : null + if(isnum(num) && -1 <= num && num <= 1) + return arcsin(num) + +///Returns the arccosine of a number +/datum/n_function/default/acos + name = "acos" + +/datum/n_function/default/acos/execute(this_obj, list/params) + var/num = params.len >= 1 ? params[1] : null + if(isnum(num) && -1 <= num && num <= 1) + return arccos(num) + +///Returns the natural log of a number +/datum/n_function/default/log + name = "log" + +/datum/n_function/default/log/execute(this_obj, list/params) + var/num = params.len >= 1 ? params[1] : null + if(isnum(num) && 0 < num) + return log(num) + +///Replaces text +/datum/n_function/default/replace + name = "replace" + +/datum/n_function/default/replace/execute(this_obj, list/params) + var/text = params.len >= 1 ? params[1] : null + var/find = params.len >= 2 ? params[2] : null + var/replacement = params.len >= 3 ? params[3] : null + if(!istext(text) || !istext(find) || !istext(replacement)) + return + var/find_len = length(find) + if(!find_len) + return text + + var/max_count + if(params.len >= 4 && isnum(params[4])) + max_count = min(params[4], SCRIPT_MAX_REPLACEMENTS_ALLOWED) + else + max_count = SCRIPT_MAX_REPLACEMENTS_ALLOWED + + . = "" + var/last_found = 1 + for(var/count = 0; count < max_count; ++count) + var/found = findtext(text, find, last_found, 0) + if(!found) + break + . += copytext(text, last_found, found) + . += replacement + last_found = found + find_len + return . + copytext(text, last_found) + +/** + * Miscellaneous functions + */ + +/datum/n_function/default/time + name = "time" + +/datum/n_function/default/time/execute(this_obj, list/params) + return world.timeofday + +///Clone of BYOND's sleep() +/datum/n_function/default/sleeps + name = "sleep" + +/datum/n_function/default/sleeps/execute(this_obj, list/params) + var/time = params.len >= 1 ? params[1] : null + sleep(time) + +/datum/n_function/default/timestamp + name = "timestamp" + +/datum/n_function/default/timestamp/execute(this_obj, list/params) + return gameTimestamp(arglist(params)) + +#undef SCRIPT_MAX_REPLACEMENTS_ALLOWED diff --git a/monkestation/code/modules/NTSL/code/coding_language/implementations/telecomms_translator.dm b/monkestation/code/modules/NTSL/code/coding_language/implementations/telecomms_translator.dm new file mode 100644 index 000000000000..075a2712cb01 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/implementations/telecomms_translator.dm @@ -0,0 +1,510 @@ +/** + * Nanotrasen TCS Language - Made by Doohl, ported to Yogs by Altoids + */ +#define HUMAN (1<<0) +#define MONKEY (1<<1) +#define ROBOT (1<<2) +#define POLYSMORPH (1<<3) +#define DRACONIC (1<<4) +#define BEACHTONGUE (1<<5) +#define SYLVAN (1<<6) +#define ETHEREAN (1<<7) +#define BONE (1<<8) +#define MOTH (1<<9) +#define CAT (1<<10) +#define ENGLISH (1<<11) + +///Span classes that players are allowed to set in a radio transmission. +GLOBAL_LIST_INIT(allowed_custom_spans, list( + SPAN_ROBOT, + SPAN_YELL, + SPAN_ITALICS, + SPAN_SANS, + SPAN_COMMAND, + SPAN_CLOWN, +)) + +///Language datums that players are allowed to translate to in a radio transmission. +///This is fucking broken. +GLOBAL_LIST_INIT(allowed_translations, list( + /datum/language/common, + /datum/language/machine, + /datum/language/draconic, +)) + +/datum/n_Interpreter/TCS_Interpreter + var/datum/TCS_Compiler/Compiler + +/datum/n_Interpreter/TCS_Interpreter/HandleError(datum/runtimeError/e) + Compiler.Holder.add_entry(e.ToString(), "Execution Error") + +/datum/n_Interpreter/TCS_Interpreter/garbage_collect() + . = ..() + Compiler = null + +/datum/TCS_Compiler + var/datum/n_Interpreter/TCS_Interpreter/interpreter + ///The telecomms server that is running the code. + var/obj/machinery/telecomms/server/Holder + ///Boolean on whether it's ready to run code. + var/ready = TRUE + +/** + * Set ourselves to Garbage Collect. + */ +/datum/TCS_Compiler/proc/garbage_collect() + Holder = null + if(interpreter) + interpreter.garbage_collect() +/** + * Compile a raw block of text. + */ +/datum/TCS_Compiler/proc/Compile(code as message) + var/datum/n_scriptOptions/options = new() + var/datum/n_Scanner/nS_Scanner/scanner = new(code, options) + var/list/datum/token/tokens = scanner.Scan() + var/datum/n_Parser/nS_Parser/parser = new(tokens, options) + var/datum/node/BlockDefinition/GlobalBlock/program = parser.Parse() + + var/list/returnerrors = list() + + returnerrors += scanner.errors + returnerrors += parser.errors + + if(returnerrors.len) + return returnerrors + + interpreter = new(program) + interpreter.persist = TRUE + interpreter.Compiler = src + interpreter.container = src + + interpreter.SetVar("PI", 3.141592653) // value of pi + interpreter.SetVar("E" , 2.718281828) // value of e + interpreter.SetVar("SQURT2", 1.414213562) // value of the square root of 2 + interpreter.SetVar("FALSE", 0) // boolean shortcut to 0 + interpreter.SetVar("false", 0) // boolean shortcut to 0 + interpreter.SetVar("TRUE", 1) // boolean shortcut to 1 + interpreter.SetVar("true", 1) // boolean shortcut to 1 + + interpreter.SetVar("NORTH", NORTH) // NORTH (1) + interpreter.SetVar("SOUTH", SOUTH) // SOUTH (2) + interpreter.SetVar("EAST", EAST) // EAST (4) + interpreter.SetVar("WEST", WEST) // WEST (8) + + // Channel macros + // Common server is the one that handles the AI Private Channel, btw. + interpreter.SetVar( + "channels", new /datum/n_enum(list( + "common" = FREQ_COMMON, + "science" = FREQ_SCIENCE, + "command" = FREQ_COMMAND, + "medical" = FREQ_MEDICAL, + "engineering" = FREQ_ENGINEERING, + "security" = FREQ_SECURITY, + "supply" = FREQ_SUPPLY, + "service" = FREQ_SERVICE, + "centcom" = FREQ_CENTCOM, + "aiprivate" = FREQ_AI_PRIVATE, + )) + ) + + + interpreter.SetVar( + "filter_types", new /datum/n_enum(list( + "robot" = SPAN_ROBOT, + "loud" = SPAN_YELL, + "emphasis" = SPAN_ITALICS, + "wacky" = SPAN_SANS, + "commanding" = SPAN_COMMAND, + )) + ) + + /** + * Current allowed span classes + * + * Language bitflags + * (Following comment written 26 Jan 2019) + * So, language doesn't work with bitflags anymore + * But having them be bitflags inside of NTSL makes more sense in its context + * So, when we get the signal back from NTSL, if the language has been altered, we'll set it to a new language datum, + * based on the bitflag the guy used. + * + * However, I think the signal can only have one language + * So, the lowest bit set within $language overrides any higher ones that are set. + */ + interpreter.SetVar("languages", new /datum/n_enum(list( + "human" = HUMAN, + "monkey" = MONKEY, + "robot" = ROBOT, + "polysmorph" = POLYSMORPH, + "draconic" = DRACONIC, + "beachtounge" = BEACHTONGUE, + "sylvan" = SYLVAN, + "etherean" = ETHEREAN, + "bonespeak" = BONE, + "mothian" = MOTH, + "cat" = CAT, + "english" = ENGLISH, + ))) + + interpreter.Run() // run the thing + + if(Holder) + Holder.compile_warnings = parser.warnings || list() + if(!interpreter.ProcExists("process_signal")) // yell at the user if they need to update their scripts + Holder.compile_warnings += new /datum/scriptError/OutdatedScript() + + return returnerrors + +/** + * Executes the Compiled code on an incoming signal. + */ +/datum/TCS_Compiler/proc/Run(datum/signal/subspace/vocal/signal) + if(!ready) + return + + if(!interpreter || !interpreter.ProcExists("process_signal")) + return + + var/datum/language/oldlang = signal.language + var/oldlangbits + switch(oldlang) + if(/datum/language/common) + oldlangbits = HUMAN + if(/datum/language/monkey) + oldlangbits = MONKEY + if(/datum/language/machine) + oldlangbits = ROBOT + if(/datum/language/draconic) + oldlangbits = DRACONIC + if(/datum/language/beachbum) + oldlangbits = BEACHTONGUE + if(/datum/language/sylvan) + oldlangbits = SYLVAN + if(/datum/language/voltaic) + oldlangbits = ETHEREAN + if(/datum/language/calcic) + oldlangbits = BONE + if(/datum/language/moffic) + oldlangbits = MOTH + if(/datum/language/nekomimetic) + oldlangbits = CAT + + // Signal data + var/datum/n_struct/signal/script_signal = new(list( + "content" = html_decode(signal.data["message"]), + "freq" = signal.frequency, + "source" = signal.data["name"], + "uuid" = signal.data["name"], + "sector" = signal.levels, + "job" = signal.data["job"], + "pass" = !(signal.data["reject"]), + "filters" = signal.data["spans"], + "language" = oldlangbits, + "say" = signal.virt.verb_say, + "ask" = signal.virt.verb_ask, + "yell" = signal.virt.verb_yell, + "exclaim" = signal.virt.verb_exclaim, + )) + + // Run the compiled code + script_signal = interpreter.CallProc("process_signal", list(script_signal)) + if(!istype(script_signal)) + signal.data["reject"] = TRUE + return + + // Backwards-apply variables onto signal data + /* sanitize EVERYTHING. fucking players can't be trusted with SHIT */ + + var/msg = script_signal.get_clean_property("content", signal.data["message"]) + if(isnum(msg)) + msg = "[msg]" + else if(!msg) + msg = "*beep*" + signal.data["message"] = msg + + + signal.frequency = script_signal.get_clean_property("freq", signal.frequency) + + var/setname = script_signal.get_clean_property("source", signal.data["name"]) + + if(signal.data["name"] != setname) + signal.data["realname"] = signal.data["name"] + signal.virt.name = setname + signal.data["name"] = setname + //signal.data["uuid"] = script_signal.get_clean_property("$uuid", signal.data["uuid"]) + signal.levels = script_signal.get_clean_property("sector", signal.levels) + signal.data["job"] = script_signal.get_clean_property("job", signal.data["job"]) + signal.data["reject"] = !(script_signal.get_clean_property("pass")) // set reject to the opposite of $pass + signal.virt.verb_say = script_signal.get_clean_property("say") + signal.virt.verb_ask = script_signal.get_clean_property("ask") + signal.virt.verb_yell = script_signal.get_clean_property("yell") + signal.virt.verb_exclaim = script_signal.get_clean_property("exclaim") + var/newlang = LangBit2Datum(script_signal.get_clean_property("language")) + if(newlang != oldlang)// makes sure that we only clean out unallowed languages when a translation is taking place otherwise we run an unnecessary proc to filter newlang on foreign untranslated languages. + if(!(LAZYFIND(GLOB.allowed_translations, oldlang))) // cleans out any unallowed translations by making sure the new language is on the allowed translation list. Tcomms powergaming is dead! - Hopek + newlang = oldlang + signal.language = newlang || oldlang + signal.data["language"] = newlang || oldlang + var/list/setspans = script_signal.get_clean_property("filters") //Save the span vector/list to a holder list + if(islist(setspans)) //Players cannot be trusted with ANYTHING. At all. Ever. + setspans &= GLOB.allowed_custom_spans //Prune out any illegal ones. Go ahead, comment this line out. See the horror you can unleash! + signal.data["spans"] = setspans //Apply new span to the signal only if it is a valid list, made using $filters & vector() in the script. + else + signal.data["spans"] = list() + + // If the message is invalid, just don't broadcast it! + if(signal.data["message"] == "" || !signal.data["message"]) + signal.data["reject"] = TRUE + +/datum/n_struct/signal + +/datum/n_struct/signal/New(list/property_list) + properties = property_list | list( + "content" = "", + "freq" = 1459, + "source" = "", + "uuid" = "", + "sector" = list(), + "job" = "", + "pass" = TRUE, + "filters" = list(), + "language" = HUMAN, + "say" = "says", + "ask" = "asks", + "yell" = "yells", + "exclaim" = "exclaims", + ) + +// makes a new signal object + +// arguments: message, freq, source, job +// if you want to change anything else do it yourself +/datum/n_function/default/signal + name = "signal" + interp_type = /datum/n_Interpreter/TCS_Interpreter + +/datum/n_function/default/signal/execute(this_obj, list/params) + var/datum/n_struct/signal/S = new + if(params.len >= 1) + S.properties["content"] = params[1] + if(params.len >= 2) + S.properties["freq"] = params[2] + if(params.len >= 3) + S.properties["source"] = params[3] + if(params.len >= 4) + S.properties["job"] = params[4] + return S + + +/* -- Actual language proc code -- */ + +#define SIGNAL_COOLDOWN 20 // 2 seconds +#define MAX_MEM_VARS 500 // The maximum number of variables that can be stored by NTSL via mem() + +/proc/LangBit2Datum(langbits) // Takes in the set language bits, returns the datum to use + if(istype(langbits, /datum/language)) + return langbits + + switch(langbits) + if(HUMAN) + return /datum/language/common + if(MONKEY) + return /datum/language/monkey + if(ROBOT) + return /datum/language/machine + if(DRACONIC) + return /datum/language/draconic + if(BEACHTONGUE) + return /datum/language/beachbum + if(SYLVAN) + return /datum/language/sylvan + if(ETHEREAN) + return /datum/language/voltaic + if(BONE) + return /datum/language/calcic + if(MOTH) + return /datum/language/moffic + if(CAT) + return /datum/language/nekomimetic + +/datum/n_function/default/mem + name = "mem" + interp_type = /datum/n_Interpreter/TCS_Interpreter + +/datum/n_function/default/mem/execute(this_obj, list/params, datum/scope/scope, datum/n_Interpreter/TCS_Interpreter/interp) + var/address = params.len >= 1 ? params[1] : null + var/value = params.len >= 2 ? params[2] : null + if(istext(address)) + var/obj/machinery/telecomms/server/S = interp.Compiler.Holder + + if(params.len == 1) // Getting the value + return S.memory[address] + else if(value == null) // setting it to null? You must be trying to remove it! Since altoids added this fancy ass memory thing might as well + S.memory -= address + return TRUE + else // Setting the value + if(S.memory.len >= MAX_MEM_VARS) + if(!(address in S.memory)) + return FALSE + S.memory[address] = value + return TRUE + +/datum/n_function/default/clearmem + name = "clearmem" + interp_type = /datum/n_Interpreter/TCS_Interpreter + +/datum/n_function/default/clearmem/execute(this_obj, list/params, datum/scope/scope, datum/n_Interpreter/TCS_Interpreter/interp) + var/obj/machinery/telecomms/server/S = interp.Compiler.Holder + S.memory = list() + return TRUE + +/datum/n_function/default/remote_signal + name = "remote_signal" + interp_type = /datum/n_Interpreter/TCS_Interpreter + +/datum/n_function/default/remote_signal/execute(this_obj, list/params, datum/scope/scope, datum/n_Interpreter/TCS_Interpreter/interp) + var/freq = params.len >= 1 ? params[1] : 1459 + var/code = params.len >= 2 ? params[2] : 30 + + if(isnum(freq) && isnum(code)) + + var/obj/machinery/telecomms/server/S = interp.Compiler.Holder + + if(S.last_signal + SIGNAL_COOLDOWN > world.timeofday && S.last_signal < MIDNIGHT_ROLLOVER) + return + S.last_signal = world.timeofday + + if(findtext(num2text(freq), ".")) // if the frequency has been set as a decimal + freq *= 10 // shift the decimal one place + // "But wait, wouldn't floating point mess this up?" You ask. + // Nah. That actually can't happen when you multiply by a whole number. + // Think about it. + + freq = sanitize_frequency(freq) + + var/datum/radio_frequency/connection = SSradio.return_frequency(freq) + + code = round(code) + code = clamp(code, 0, 100) + + var/datum/signal/signal = new + signal.source = S + signal.data["code"] = code + signal.data["message"] = "ACTIVATE" + + connection.post_signal(S, signal) + + message_admins("Telecomms server \"[S.id]\" sent a signal command, which was triggered by NTSL: [format_frequency(freq)]/[code]") + +/datum/n_function/default/broadcast + name = "broadcast" + interp_type = /datum/n_Interpreter/TCS_Interpreter + +/datum/n_function/default/broadcast/execute(this_obj, list/params, datum/scope/scope, datum/n_Interpreter/TCS_Interpreter/interp) + if(params.len < 1) + return + var/datum/n_struct/signal/script_signal = params[1] + if(!istype(script_signal)) + return + + var/message = script_signal.get_clean_property("content") + var/freq = script_signal.get_clean_property("freq") + var/source = script_signal.get_clean_property("source") + var/job = script_signal.get_clean_property("job") + var/spans = script_signal.get_clean_property("filters") + var/say = script_signal.get_clean_property("say") + var/ask = script_signal.get_clean_property("ask") + var/yell = script_signal.get_clean_property("yell") + var/exclaim = script_signal.get_clean_property("exclaim") + var/language = script_signal.get_clean_property("language") + + + var/obj/machinery/telecomms/server/S = interp.Compiler.Holder + var/obj/item/radio/server/hradio = S.server_radio + + if(!hradio) + throw EXCEPTION("tcombroadcast(): signal has no radio") + return + //First lets do some checks for bad input + if(isnum(message)) // Allows for setting $content to a number value + message = "[message]" + if((!message) && message != 0) + message = "*beep*" + if(!source) + source = "[html_encode(uppertext(S.id))]" + //hradio = new // sets the hradio as a radio intercom + if(!job) + job = "Unknown" + if(!freq || (!isnum(freq) && text2num(freq) == null)) + freq = 1459 + if(!isnum(freq)) + freq = text2num(freq) + if(findtext(num2text(freq), ".")) // if the frequency has been set as a decimal + freq *= 10 // shift the decimal one place + // "But wait, wouldn't floating point mess this up?" You ask. + // Nah. That actually can't happen when you multiply by a whole number. + // Think about it. + if(isnum(language)) // If the language was a lang bit instead of a datum + language = LangBit2Datum(language) + if(!islist(spans)) + spans = list() + else + spans &= GLOB.allowed_custom_spans //Removes any spans not on the allowed list. Comment this out if want to let players use ANY span in stylesheet.dm! + + //SAY REWRITE RELATED CODE. + //This code is a little hacky, but it *should* work. Even though it'll result in a virtual speaker referencing another virtual speaker. vOv + var/atom/movable/virtualspeaker/virt = new + virt.name = source + virt.job = job + virt.verb_say = say + virt.verb_ask = ask + virt.verb_exclaim = exclaim + virt.verb_yell = yell + + var/datum/signal/subspace/vocal/newsign = new(hradio, freq, virt, language, message, spans, list(), list(S.z)) + /* + virt.languages_spoken = language + virt.languages_understood = virt.languages_spoken //do not remove this or everything turns to jibberish + */ + //END SAY REWRITE RELATED CODE. + + //Now we set up the signal + newsign.data["mob"] = virt + newsign.data["mobtype"] = /mob/living/carbon/human + newsign.data["name"] = source + newsign.data["realname"] = newsign.data["name"] + newsign.data["uuid"] = source + newsign.data["job"] = "[job]" + newsign.data["compression"] = 0 + newsign.data["message"] = message + //newsign.data["type"] = BROADCAST_ARTIFICIAL // artificial broadcast + newsign.data["spans"] = spans + newsign.data["language"] = language + newsign.frequency = freq + newsign.data["radio"] = hradio + newsign.data["vmessage"] = message + newsign.data["vname"] = source + newsign.data["vmask"] = 0 + + + var/pass = S.relay_information(newsign, /obj/machinery/telecomms/hub) + if(!pass) // If we're not sending this to the hub (i.e. we're running a basic tcomms or something) + pass = S.relay_information(newsign, /obj/machinery/telecomms/broadcaster) // send this message to broadcasters directly + return pass // Returns, as of Jan 23 2019, the number of machines that received this broadcast's message. + +#undef SIGNAL_COOLDOWN +#undef MAX_MEM_VARS +#undef HUMAN +#undef MONKEY +#undef ROBOT +#undef POLYSMORPH +#undef DRACONIC +#undef BEACHTONGUE +#undef SYLVAN +#undef ETHEREAN +#undef BONE +#undef MOTH +#undef CAT +#undef ENGLISH diff --git a/monkestation/code/modules/NTSL/code/coding_language/interpreter/evaluation.dm b/monkestation/code/modules/NTSL/code/coding_language/interpreter/evaluation.dm new file mode 100644 index 000000000000..6ba5724def4d --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/interpreter/evaluation.dm @@ -0,0 +1,262 @@ +/datum/n_Interpreter/proc/Eval(datum/node/expression/exp, datum/scope/scope) + if(istype(exp, /datum/node/expression/FunctionCall)) + . = RunFunction(exp, scope) + else if(istype(exp, /datum/node/expression/expression_operator)) + . = EvalOperator(exp, scope) + else if(istype(exp, /datum/node/expression/value/literal)) + var/datum/node/expression/value/literal/lit = exp + . = lit.value + else if(istype(exp, /datum/node/expression/value/reference)) + var/datum/node/expression/value/reference/ref = exp + . = ref.value + else if(istype(exp, /datum/node/expression/value/variable)) + var/datum/node/expression/value/variable/v = exp + . = scope.get_var(v.id.id_name, src, v) + else if(istype(exp, /datum/node/expression/value/list_init)) + var/datum/node/expression/value/list_init/list_exp = exp + . = list() + for(var/key in list_exp.init_list) + var/key_eval = Eval(key, scope) + var/val = list_exp.init_list[key] + if(val) + set_index(., key_eval, Eval(val, scope), scope, key) + else + . += list(key_eval) + else if(istype(exp, /datum/node/expression/member/dot)) + var/datum/node/expression/member/dot/D = exp + var/object = D.temp_object || Eval(D.object, scope) + D.temp_object = null + . = get_property(object, D.id.id_name, scope) + else if(istype(exp, /datum/node/expression/member/brackets)) + var/datum/node/expression/member/brackets/B = exp + var/object = B.temp_object || Eval(B.object, scope) + B.temp_object = null + var/index = B.temp_index || Eval(B.index, scope) + . = get_index(object, index, scope) + else if(istype(exp, /datum/node/expression)) + RaiseError(new /datum/runtimeError/UnknownInstruction(exp), scope, exp) + else + . = exp + + return Trim(.) + +/datum/n_Interpreter/proc/EvalOperator(datum/node/expression/expression_operator/exp, datum/scope/scope) + if(istype(exp, /datum/node/expression/expression_operator/binary/Assign)) + var/datum/node/expression/expression_operator/binary/Assign/ass = exp + var/member_obj + var/member_idx + if(istype(ass.exp, /datum/node/expression/value/variable)) + var/datum/node/expression/value/variable/var_exp = ass.exp + if(!scope.get_scope(var_exp.id.id_name)) + scope.init_var(var_exp.id.id_name, null, src, var_exp) + else if(istype(ass.exp, /datum/node/expression/member)) + var/datum/node/expression/member/M = ass.exp + member_obj = Eval(M.object, scope) + if(istype(M, /datum/node/expression/member/brackets)) + var/datum/node/expression/member/brackets/B = M + member_idx = Eval(B.index, scope) + var/out_value + var/in_value + if(ass.type != /datum/node/expression/expression_operator/binary/Assign) + if(istype(ass.exp, /datum/node/expression/member)) + var/datum/node/expression/member/M = ass.exp + M.temp_object = member_obj + if(istype(M, /datum/node/expression/member/brackets)) + var/datum/node/expression/member/brackets/B = M + B.temp_index = member_idx + in_value = Eval(ass.exp, scope) + if(islist(in_value)) + out_value = in_value + switch(ass.type) + if(/datum/node/expression/expression_operator/binary/Assign/BitwiseAnd) + in_value &= Eval(ass.exp2, scope) + if(/datum/node/expression/expression_operator/binary/Assign/BitwiseOr) + in_value |= Eval(ass.exp2, scope) + if(/datum/node/expression/expression_operator/binary/Assign/BitwiseXor) + in_value ^= Eval(ass.exp2, scope) + if(/datum/node/expression/expression_operator/binary/Assign/Add) + in_value += Eval(ass.exp2, scope) + if(/datum/node/expression/expression_operator/binary/Assign/Subtract) + in_value -= Eval(ass.exp2, scope) + else + out_value = null + if(!out_value) + switch(ass.type) + if(/datum/node/expression/expression_operator/binary/Assign) + out_value = Eval(ass.exp2, scope) + if(/datum/node/expression/expression_operator/binary/Assign/BitwiseAnd) + out_value = BitwiseAnd(in_value, Eval(ass.exp2, scope), scope, ass) + if(/datum/node/expression/expression_operator/binary/Assign/BitwiseOr) + out_value = BitwiseOr(in_value, Eval(ass.exp2, scope), scope, ass) + if(/datum/node/expression/expression_operator/binary/Assign/BitwiseXor) + out_value = BitwiseXor(in_value, Eval(ass.exp2, scope), scope, ass) + if(/datum/node/expression/expression_operator/binary/Assign/Add) + out_value = Add(in_value, Eval(ass.exp2, scope), scope, ass) + if(/datum/node/expression/expression_operator/binary/Assign/Subtract) + out_value = Subtract(in_value, Eval(ass.exp2, scope), scope, ass) + if(/datum/node/expression/expression_operator/binary/Assign/Multiply) + out_value = Multiply(in_value, Eval(ass.exp2, scope), scope, ass) + if(/datum/node/expression/expression_operator/binary/Assign/Divide) + out_value = Divide(in_value, Eval(ass.exp2, scope), scope, ass) + if(/datum/node/expression/expression_operator/binary/Assign/Power) + out_value = Power(in_value, Eval(ass.exp2, scope), scope, ass) + if(/datum/node/expression/expression_operator/binary/Assign/Modulo) + out_value = Modulo(in_value, Eval(ass.exp2, scope), scope, ass) + else + RaiseError(new /datum/runtimeError/UnknownInstruction(ass), scope, ass) + // write it to the var + if(istype(ass.exp, /datum/node/expression/value/variable)) + var/datum/node/expression/value/variable/var_exp = ass.exp + scope.set_var(var_exp.id.id_name, out_value, src, var_exp) + else if(istype(ass.exp, /datum/node/expression/member/dot)) + var/datum/node/expression/member/dot/dot_exp = ass.exp + set_property(member_obj, dot_exp.id.id_name, out_value, scope) + else if(istype(ass.exp, /datum/node/expression/member/brackets)) + set_index(member_obj, member_idx, out_value, scope) + else + RaiseError(new /datum/runtimeError/InvalidAssignment(), scope, ass) + return out_value + else if(istype(exp, /datum/node/expression/expression_operator/binary)) + var/datum/node/expression/expression_operator/binary/bin = exp + switch(bin.type) + if(/datum/node/expression/expression_operator/binary/Equal) + return Equal(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/NotEqual) + return NotEqual(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/Greater) + return Greater(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/Less) + return Less(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/GreaterOrEqual) + return GreaterOrEqual(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/LessOrEqual) + return LessOrEqual(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/LogicalAnd) + return LogicalAnd(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/LogicalOr) + return LogicalOr(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/LogicalXor) + return LogicalXor(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/BitwiseAnd) + return BitwiseAnd(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/BitwiseOr) + return BitwiseOr(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/BitwiseXor) + return BitwiseXor(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/Add) + return Add(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/Subtract) + return Subtract(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/Multiply) + return Multiply(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/Divide) + return Divide(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/Power) + return Power(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + if(/datum/node/expression/expression_operator/binary/Modulo) + return Modulo(Eval(bin.exp, scope), Eval(bin.exp2, scope), scope, bin) + else + RaiseError(new /datum/runtimeError/UnknownInstruction(bin), scope, bin) + else + switch(exp.type) + if(/datum/node/expression/expression_operator/unary/Minus) + return Minus(Eval(exp.exp, scope), scope, exp) + if(/datum/node/expression/expression_operator/unary/LogicalNot) + return LogicalNot(Eval(exp.exp, scope), scope, exp) + if(/datum/node/expression/expression_operator/unary/BitwiseNot) + return BitwiseNot(Eval(exp.exp, scope), scope, exp) + if(/datum/node/expression/expression_operator/unary/group) + return Eval(exp.exp, scope) + else + RaiseError(new /datum/runtimeError/UnknownInstruction(exp), scope, exp) + +/datum/n_Interpreter/proc/Equal(a, b) + return a==b + +/datum/n_Interpreter/proc/NotEqual(a, b) + return a!=b //LogicalNot(Equal(a, b)) + +/datum/n_Interpreter/proc/Greater(a, b) + return a>b + +/datum/n_Interpreter/proc/Less(a, b) + return a=b + +/datum/n_Interpreter/proc/LessOrEqual(a, b) + return a<=b + +/datum/n_Interpreter/proc/LogicalAnd(a, b) + return a&&b + +/datum/n_Interpreter/proc/LogicalOr(a, b) + return a||b + +/datum/n_Interpreter/proc/LogicalXor(a, b) + return (a||b) && !(a&&b) + +/datum/n_Interpreter/proc/BitwiseAnd(a, b) + return a&b + +/datum/n_Interpreter/proc/BitwiseOr(a, b) + return a|b + +/datum/n_Interpreter/proc/BitwiseXor(a, b) + return a^b + +/datum/n_Interpreter/proc/Add(a, b, scope, node) + if(istext(a) && !istext(b)) + b = "[b]" + else if(istext(b) && !istext(a) && !islist(a)) + a = "[a]" + if(isnull(a) || isnull(b)) + RaiseError(new /datum/runtimeError/TypeMismatch("+", a, b), scope, node) + return null + return a+b + +/datum/n_Interpreter/proc/Subtract(a, b, scope, node) + if(isnull(a) || isnull(b)) + RaiseError(new /datum/runtimeError/TypeMismatch("-", a, b), scope, node) + return null + return a-b + +/datum/n_Interpreter/proc/Divide(a, b, scope, node) + if(isnull(a) || isnull(b)) + RaiseError(new /datum/runtimeError/TypeMismatch("/", a, b), scope, node) + return null + if(b) + return a/b + // If $b is 0 or Null or whatever, then the above if statement fails, + // and we got a divison by zero. + RaiseError(new /datum/runtimeError/DivisionByZero(), scope, node) + //ReleaseSingularity() + return null + +/datum/n_Interpreter/proc/Multiply(a, b, scope, node) + if(isnull(a) || isnull(b)) + RaiseError(new /datum/runtimeError/TypeMismatch("*", a, b), scope, node) + return null + return a*b + +/datum/n_Interpreter/proc/Modulo(a, b, scope, node) + if(isnull(a) || isnull(b)) + RaiseError(new /datum/runtimeError/TypeMismatch("%", a, b), scope, node) + return null + return a%b + +/datum/n_Interpreter/proc/Power(a, b, scope, node) + if(isnull(a) || isnull(b)) + RaiseError(new /datum/runtimeError/TypeMismatch("**", a, b), scope, node) + return null + return a**b + +/datum/n_Interpreter/proc/Minus(a) + return -a + +/datum/n_Interpreter/proc/LogicalNot(a) + return !a + +/datum/n_Interpreter/proc/BitwiseNot(a) + return ~a diff --git a/monkestation/code/modules/NTSL/code/coding_language/interpreter/interaction.dm b/monkestation/code/modules/NTSL/code/coding_language/interpreter/interaction.dm new file mode 100644 index 000000000000..7065bb5c7d0e --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/interpreter/interaction.dm @@ -0,0 +1,106 @@ +///Runs the Script. +/datum/n_Interpreter/proc/Run() + cur_recursion = 0 // reset recursion + cur_statements = 0 // reset CPU tracking + + ASSERT(program) + . = RunBlock(program) + +/** + * SetVar + * Defines a global variable for the duration of the next execution of a script. + * Notes: + * This differs from in that variables set using this procedure only last for the session, + * while those defined from the block object persist if it is ran multiple times. + * + * See Also: + * - + */ +/datum/n_Interpreter/proc/SetVar(name, value) + if(!istext(name)) + //CRASH("Invalid variable name") + return + globalScope.variables[name] = value + +/* + * SetProc + * Defines a procedure to be available to the script. + * + * Arguments: + * name - The name of the procedure as exposed to the script. + * path - The typepath of a proc to be called when the function call is read by the interpreter, or, if object is specified, a string representing the procedure's name. + * object - (Optional) An object which will the be target of a function call. + * params - Only required if object is not null, a list of the names of parameters the proc takes. + */ +/datum/n_Interpreter/proc/SetProc(name, path, object=null, list/params=null) + if(!istext(name)) + //CRASH("Invalid function name") + return + +/* + * VarExists + * Checks whether a global variable with the specified name exists. + */ +/datum/n_Interpreter/proc/VarExists(name) + return globalScope.variables.Find(name) //convert to 1/0 first? + +/* + * Proc: ProcExists + * Checks whether a global function with the specified name exists. + */ +/datum/n_Interpreter/proc/ProcExists(name) + return istype(globalScope.get_var(name), /datum/n_function) + +/* + * GetVar + * Returns the value of a global variable in the script. Remember to ensure that the variable exists before calling this procedure. + * + * See Also: + * - + */ +/datum/n_Interpreter/proc/GetVar(name) + if(!VarExists(name)) + //CRASH("No variable named '[name]'.") + return + var/x = globalScope.variables[name] + return x + +/* + * Proc: GetCleanVar + * Returns the value of a global variable in the script and cleans it (sanitizes). + */ +/datum/n_Interpreter/proc/GetCleanVar(name, compare) + var/x = GetVar(name) + if(istext(x) && compare && x != compare) // Was changed + x = sanitize(x) + if(isnotpretty(x)) // Pretty filter stuff + var/log_message = "An NTSL script just tripped the pretty filter, setting variable [name] from [compare] to value [x]!" + message_admins(log_message) + logger.Log(LOG_NTSL, "[key_name(src)] [log_message] [loc_name(src)]") + return FALSE + return x + +/* + * Proc: CallProc + * Calls a global function defined in the script and, amazingly enough, returns its return value. Remember to ensure that the function + * exists before calling this procedure. + * + * See Also: + * - + */ +/datum/n_Interpreter/proc/CallProc(name, list/params) + var/datum/n_function/func = globalScope.get_var(name) + if(istype(func)) + cur_recursion = 0 // reset recursion + cur_statements = 0 // reset CPU tracking + return func.execute(null, params, new /datum/scope(program, null), src) + //CRASH("Unknown function type '[name]'.") + +/* + * Event: HandleError + * Called when the interpreter throws a runtime error. + * + * See Also: + * - + */ +/datum/n_Interpreter/proc/HandleError(datum/runtimeError/e) diff --git a/monkestation/code/modules/NTSL/code/coding_language/interpreter/interpreter.dm b/monkestation/code/modules/NTSL/code/coding_language/interpreter/interpreter.dm new file mode 100644 index 000000000000..798e4363fbd7 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/interpreter/interpreter.dm @@ -0,0 +1,251 @@ +/* + * Macros: Status Macros + */ +///Indicates that the current function is returning a value. +#define RETURNING (1<<0) +///Indicates that the current loop is being terminated. +#define BREAKING (1<<2) +///Indicates that the rest of the current iteration of a loop is being skipped. +#define CONTINUING (1<<3) +///Indicates that we are entering a new function and the allowed_status var should be cleared +#define RESET_STATUS (1<<4) + +/* + * Macros: Maximums + * MAX_STATEMENTS fuckin'... holds the maximum statements. I'unno, dude, I'm not the guy who made NTSL, + * I don't do fuckin verbose-ass comments line this. + * Figure it out yourself, fuckface. + * + * very helpful comment ^ ty + */ +///Maximum amount of statements that can be called in one execution. this is to prevent massive crashes and exploitation +#define MAX_STATEMENTS 900 +///Max number of uninterrupted loops possible +#define MAX_ITERATIONS 100 +///. + var/status = FALSE + var/returnVal + + /// current amount of statements called + var/cur_statements = FALSE + //Boolean on wheteher admins should be notified of anymore issues. + var/alertadmins = FALSE + ///Current amount of recursion + var/cur_recursion = 0 + ///Boolean that will reset global variables after Run() finishes. + var/persist = TRUE + var/paused = FALSE + +/datum/n_Interpreter/New(datum/node/BlockDefinition/GlobalBlock/program) + . = ..() + if(program) + Load(program) + +/** + * Load + * Loads a 'compiled' script into Memory. + * program - A object which represents the script's global scope. + * + * Parameters: + * program - A object which represents the script's global scope. + */ +/datum/n_Interpreter/proc/Load(datum/node/BlockDefinition/GlobalBlock/program) + ASSERT(program) + src.program = program + CreateGlobalScope() + alertadmins = FALSE + +///Trims strings and vectors down to an acceptable size, to prevent runaway memory usage +/datum/n_Interpreter/proc/Trim(value) + if(istext(value) && (length(value) > MAX_STRINGLEN)) + value = copytext(value, 1, MAX_STRINGLEN+1) + else if(islist(value) && (length(value) > MAX_LISTLEN)) + var/list/L = value + value = L.Copy(1, MAX_LISTLEN+1) + return value + +///Sets ourselves to Garbage Collect. +/datum/n_Interpreter/proc/garbage_collect() + container = null + +///Raises a Runtime error. +/datum/n_Interpreter/proc/RaiseError(datum/runtimeError/e, datum/scope/scope, datum/token/token) + e.scope = scope + if(istype(token)) + e.token = token + else if(istype(token, /datum/node)) + var/datum/node/N = token + e.token = N.token + HandleError(e) + +/datum/n_Interpreter/proc/CreateGlobalScope() + var/datum/scope/S = new(program, null) + globalScope = S + for(var/functype in subtypesof(/datum/n_function/default)) + var/datum/n_function/default/god_damn_it_byond = functype + if(!istype(src, initial(god_damn_it_byond.interp_type))) + continue + var/datum/n_function/default/func = new functype() + globalScope.init_var(func.name, func) + for(var/alias in func.aliases) + globalScope.init_var(alias, func) + return S + +///Alerts the admins of a script that is bad. +/datum/n_Interpreter/proc/AlertAdmins() + if(!container || alertadmins) + return + if(!istype(container, /datum/TCS_Compiler)) + return + var/datum/TCS_Compiler/Compiler = container + var/obj/machinery/telecomms/server/Holder = Compiler.Holder + var/message = "Potential crash-inducing NTSL script detected at telecommunications server [Compiler.Holder] ([Holder.x], [Holder.y], [Holder.z])." + alertadmins = TRUE + message_admins(message) + +///Runs each statement in a block of code. +/datum/n_Interpreter/proc/RunBlock(datum/node/BlockDefinition/Block, datum/scope/scope = globalScope) + if(cur_statements >= MAX_STATEMENTS) + return + for(var/datum/node/S in Block.statements) + while(paused) + sleep(1 SECONDS) + + cur_statements++ + if(cur_statements >= MAX_STATEMENTS) + RaiseError(new /datum/runtimeError/MaxCPU(MAX_STATEMENTS), scope, S) + AlertAdmins() + break + + if(istype(S, /datum/node/expression)) + . = Eval(S, scope) + else if(istype(S, /datum/node/statement/VariableDeclaration)) + //VariableDeclaration nodes are used to forcibly declare a local variable so that one in a higher scope isn't used by default. + var/datum/node/statement/VariableDeclaration/dec=S + scope.init_var(dec.var_name.id_name, src, S) + else if(istype(S, /datum/node/statement/FunctionDefinition)) + var/datum/node/statement/FunctionDefinition/dec=S + scope.init_var(dec.func_name, new /datum/n_function/defined(dec, scope, src), src, S) + else if(istype(S, /datum/node/statement/WhileLoop)) + . = RunWhile(S, scope) + else if(istype(S, /datum/node/statement/ForLoop)) + . = RunFor(S, scope) + else if(istype(S, /datum/node/statement/IfStatement)) + . = RunIf(S, scope) + else if(istype(S, /datum/node/statement/ReturnStatement)) + if(!(scope.allowed_status & RETURNING)) + RaiseError(new /datum/runtimeError/UnexpectedReturn(), scope, S) + continue + scope.status |= RETURNING + . = (scope.return_val=Eval(S:value, scope)) + break + else if(istype(S, /datum/node/statement/BreakStatement)) + if(!(scope.allowed_status & BREAKING)) + //RaiseError(new /datum/runtimeError/UnexpectedReturn()) + continue + scope.status |= BREAKING + break + else if(istype(S, /datum/node/statement/ContinueStatement)) + if(!(scope.allowed_status & CONTINUING)) + //RaiseError(new /datum/runtimeError/UnexpectedReturn()) + continue + scope.status |= CONTINUING + break + else + RaiseError(new /datum/runtimeError/UnknownInstruction(S), scope, S) + if(scope.status) + break + +///Runs a function block or a proc with the arguments specified in the script. +/datum/n_Interpreter/proc/RunFunction(datum/node/expression/FunctionCall/stmt, datum/scope/scope) + var/datum/n_function/func + var/this_obj + if(istype(stmt.function, /datum/node/expression/member)) + var/datum/node/expression/member/M = stmt.function + this_obj = M.temp_object = Eval(M.object, scope) + func = Eval(M, scope) + else + func = Eval(stmt.function, scope) + if(!istype(func)) + RaiseError(new /datum/runtimeError/UndefinedFunction("[stmt.function.ToString()]"), scope, stmt) + return + var/list/params = list() + for(var/datum/node/expression/P in stmt.parameters) + params+=list(Eval(P, scope)) + + try + return func.execute(this_obj, params, scope, src, stmt) + catch(var/exception/E) + RaiseError(new /datum/runtimeError/Internal(E), scope, stmt) + +///Checks a condition and runs either the if block or else block. +/datum/n_Interpreter/proc/RunIf(datum/node/statement/IfStatement/stmt, datum/scope/scope) + if(!stmt.skip) + scope = scope.push(stmt.block) + if(Eval(stmt.cond, scope)) + . = RunBlock(stmt.block, scope) + // Loop through the if else chain and tell them to be skipped. + var/datum/node/statement/IfStatement/i = stmt.else_if + var/fail_safe = 800 + while(i && fail_safe) + fail_safe -= 1 + i.skip = 1 + i = i.else_if + + else if(stmt.else_block) + . = RunBlock(stmt.else_block, scope) + scope = scope.pop() + // We don't need to skip you anymore. + stmt.skip = FALSE + +///Runs a while loop. +/datum/n_Interpreter/proc/RunWhile(datum/node/statement/WhileLoop/stmt, datum/scope/scope) + var/i=1 + scope = scope.push(stmt.block, allowed_status = CONTINUING | BREAKING) + while(Eval(stmt.cond, scope) && Iterate(stmt.block, scope, i++)) + continue + scope = scope.pop(RETURNING) + +/datum/n_Interpreter/proc/RunFor(datum/node/statement/ForLoop/stmt, datum/scope/scope) + var/i=1 + scope = scope.push(stmt.block) + Eval(stmt.init, scope) + while(Eval(stmt.test, scope)) + if(Iterate(stmt.block, scope, i++)) + Eval(stmt.increment, scope) + else + break + scope = scope.pop(RETURNING) + +///Runs a single iteration of a loop. Returns a value indicating whether or not to continue looping. +/datum/n_Interpreter/proc/Iterate(datum/node/BlockDefinition/block, datum/scope/scope, count) + RunBlock(block, scope) + if(MAX_ITERATIONS > 0 && count >= MAX_ITERATIONS) + RaiseError(new /datum/runtimeError/IterationLimitReached(), scope, block) + return FALSE + if(status & (BREAKING|RETURNING)) + return FALSE + status &= ~CONTINUING + return TRUE + +#undef MAX_STATEMENTS +#undef MAX_ITERATIONS +#undef MAX_RECURSION +#undef MAX_STRINGLEN +#undef MAX_LISTLEN diff --git a/monkestation/code/modules/NTSL/code/coding_language/interpreter/objects.dm b/monkestation/code/modules/NTSL/code/coding_language/interpreter/objects.dm new file mode 100644 index 000000000000..80c1c15914e6 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/interpreter/objects.dm @@ -0,0 +1,230 @@ +GLOBAL_LIST_EMPTY(ntsl_methods) + +/datum/n_Interpreter/proc/get_property(object, key, datum/scope/scope, node) //fun fact: node is always null here. + if(islist(object)) + var/list/L = object + switch(key) + if("len") + return L.len + if("Copy") + return ntsl_method(/list, /datum/n_function/list_copy) + if("Cut") + return ntsl_method(/list, /datum/n_function/list_cut) + if("Find") + return ntsl_method(/list, /datum/n_function/list_find) + if("Insert") + return ntsl_method(/list, /datum/n_function/list_insert) + if("Join") + return ntsl_method(/list, /datum/n_function/list_join) + if("Remove") + return ntsl_method(/list, /datum/n_function/list_remove) + if("Swap") + return ntsl_method(/list, /datum/n_function/list_swap) + else if(istext(object)) + if(key == "len") + return length(object) + else if(istype(object, /datum)) + var/datum/D = object + return D.ntsl_get(key, scope, src, node) + RaiseError(new /datum/runtimeError/UndefinedVariable("[object].[key]"), scope, node) + +/datum/n_Interpreter/proc/set_property(object, key, val, datum/scope/scope, node) + if(istype(object, /datum)) + var/datum/D = object + D.ntsl_set(key, val, scope, src, node) + return + RaiseError(new /datum/runtimeError/UndefinedVariable("[object].[key]"), scope, node) + +/datum/n_Interpreter/proc/get_index(object, index, datum/scope/scope, node) + if(islist(object)) + var/list/L = object + if(!isnum(index) || (index <= L.len && index >= 1)) + return L[index] + else if(istext(object)) + if(isnum(index) && index >= 1 && index <= length(object)) + return object[index] + RaiseError(new /datum/runtimeError/IndexOutOfRange(object, index), scope, node) + +/datum/n_Interpreter/proc/set_index(object, index, val, datum/scope/scope, node) + if(islist(object)) + var/list/L = object + if(!isnum(index) || (index <= L.len && index >= 1)) + L[index] = val + return + RaiseError(new /datum/runtimeError/IndexOutOfRange(object, index), scope, node) + +/datum/proc/ntsl_get(key, datum/scope/scope, datum/n_Interpreter/interp, node) //fun fact: node is always null here. + interp.RaiseError(new /datum/runtimeError/UndefinedVariable("[src].[key]"), scope, node) + return + +/datum/proc/ntsl_set(key, val, datum/scope/scope, datum/n_Interpreter/interp, node) + interp.RaiseError(new /datum/runtimeError/UndefinedVariable("[src].[key]"), scope, node) + return + +/datum/n_enum + var/list/entries + +/datum/n_enum/New(list/entry_list) + src.entries = entry_list + +/datum/n_enum/ntsl_get(key, datum/scope/scope, datum/n_Interpreter/interp, node) + if(entries.Find(key)) + return entries[key] + return ..() + +/datum/n_struct + var/list/properties + +/datum/n_struct/New(list/property_list) + src.properties = property_list + +/datum/n_struct/proc/get_clean_property(name, compare) + var/x = properties[name] + if(istext(x) && compare && x != compare) // Was changed + x = sanitize(x) + if(isnotpretty(x)) // Pretty filter stuff + var/log_message = "An NTSL script just tripped the pretty filter, setting variable [name] from [compare] to value [x]!" + message_admins(log_message) + logger.Log(LOG_NTSL, "[key_name(src)] [log_message] [loc_name(src)]") + return FALSE + return x + +/datum/n_struct/ntsl_get(key, datum/scope/scope, datum/n_Interpreter/interp, node) + if(properties.Find(key)) + return properties[key] + return ..() + +/datum/n_struct/ntsl_set(key, val) + if(properties.Find(key)) + properties[key] = val + return + return ..() + +/datum/n_function + var/name = "" + +/datum/n_function/proc/execute(this_obj, list/params, datum/scope/scope, datum/n_Interpreter/interp) + return + +/datum/n_function/defined + var/datum/n_Interpreter/context + var/datum/scope/closure + var/datum/node/statement/FunctionDefinition/function_def + +/datum/n_function/defined/New(datum/node/statement/FunctionDefinition/function_def, datum/scope/closure, datum/n_Interpreter/context) + src.function_def = function_def + src.closure = closure + src.context = context + +/datum/n_function/defined/execute(this_obj, list/params, datum/scope/scope, datum/n_Interpreter/interp, datum/node/node) + if(scope.recursion >= 10) + interp.AlertAdmins() + interp.RaiseError(new /datum/runtimeError/RecursionLimitReached(), scope, node) + return FALSE + scope = scope.push(function_def.block, closure, RESET_STATUS | RETURNING) + scope.recursion++ + scope.function = function_def + if(node) + scope.call_node = node + for(var/i=1 to function_def.parameters.len) + var/val + if(params.len>=i) + val = params[i] + //else + // unspecified param + scope.init_var(function_def.parameters[i], val, interp, node) + scope.init_var("src", this_obj, interp, node); + interp.RunBlock(function_def.block, scope) + //Handle return value + . = scope.return_val + scope = scope.pop(0) // keep nothing + +/datum/n_function/default + // functions included on compilation + var/interp_type = /datum/n_Interpreter // include this function in this kind of interpreter. + var/list/aliases // in case you want to give it multiple "names" + +/proc/ntsl_method(path, proc_ref, N) + var/list/path_methods = GLOB.ntsl_methods[path] + if(!path_methods) + path_methods = list() + GLOB.ntsl_methods[path] = path_methods + var/datum/n_function/func = path_methods[proc_ref] + if(func) + return func + if(ispath(proc_ref, /datum/n_function) && !ispath(path, /datum/n_function)) + func = new proc_ref() + else + func = new /datum/n_function/default_method(path, proc_ref, N) + path_methods[proc_ref] = func + return func + +/datum/n_function/default_method + var/obj_type + var/proc_ref + +/datum/n_function/default_method/New(path, ref, name) + src.obj_type = path + src.proc_ref = ref + src.name = name + +/datum/n_function/default_method/execute(this_obj, list/params, datum/scope/scope, datum/n_Interpreter/interp) + if(!istype(this_obj, obj_type)) + return + return call(this_obj, proc_ref)(params, scope, interp) + +/datum/n_function/list_add + name = "Add" + +/datum/n_function/list_add/execute(list/this_obj, list/params) + for(var/param in params) + this_obj.Add(param) + +/datum/n_function/list_copy + name = "Copy" + +/datum/n_function/list_copy/execute(list/this_obj, list/params) + return this_obj.Copy(params.len >= 1 ? params[1] : 1, params.len >= 2 ? params[2] : 0) + +/datum/n_function/list_cut + name = "Cut" + +/datum/n_function/list_cut/execute(list/this_obj, list/params) + this_obj.Cut(params.len >= 1 ? params[1] : 1, params.len >= 2 ? params[2] : 0) + +/datum/n_function/list_find + name = "Find" + +/datum/n_function/list_find/execute(list/this_obj, list/params) + return this_obj.Find(params[1], params.len >= 2 ? params[2] : 1, params.len >= 3 ? params[3] : 0) + +/datum/n_function/list_insert + name = "Insert" + +/datum/n_function/list_insert/execute(list/this_obj, list/params) + if(params.len >= 2) + if(params[1] == 0) + for(var/I in 2 to params.len) + this_obj.Add(params[I]) + else + for(var/I = params.len; I >= 2; I--) + this_obj.Insert(params[1], params[I]) + +/datum/n_function/list_join + name = "Join" + +/datum/n_function/list_join/execute(list/this_obj, list/params) + return this_obj.Join(params[1], params.len >= 2 ? params[2] : 1, params.len >= 3 ? params[3] : 0) + +/datum/n_function/list_remove + name = "Remove" + +/datum/n_function/list_remove/execute(list/this_obj, list/params) + for(var/param in params) + this_obj.Remove(param) + +/datum/n_function/list_swap + name = "Swap" + +/datum/n_function/list_swap/execute(list/this_obj, list/params) + this_obj.Swap(params[1], params[2]) diff --git a/monkestation/code/modules/NTSL/code/coding_language/interpreter/scope.dm b/monkestation/code/modules/NTSL/code/coding_language/interpreter/scope.dm new file mode 100644 index 000000000000..5954223b3aec --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/interpreter/scope.dm @@ -0,0 +1,80 @@ +/* + * Scope + * A runtime instance of a block. Used internally by the interpreter. + */ +/datum/scope + var/datum/scope/parent + var/datum/scope/variables_parent + var/datum/node/BlockDefinition/block + var/list/functions + var/list/variables + var/status = 0 + var/allowed_status = 0 + var/recursion = 0 + var/datum/node/statement/FunctionDefinition/function + var/datum/node/expression/FunctionCall/call_node + var/return_val + +/datum/scope/New(datum/node/BlockDefinition/B, datum/scope/parent, datum/scope/variables_parent, allowed_status = 0) + src.block = B + src.parent = parent + src.variables_parent = variables_parent || parent + if(B) + src.variables = B.initial_variables.Copy() + src.functions = B.functions.Copy() + else + src.variables = list() + src.functions = list() + if(parent) + src.status = parent.status + src.recursion = parent.recursion + + if(allowed_status & RESET_STATUS || !parent) + src.allowed_status = allowed_status & ~RESET_STATUS + else + src.allowed_status = allowed_status | parent.allowed_status + return ..() + +/datum/scope/proc/get_scope(name) + var/datum/scope/S = src + while(S) + if(S.variables.Find(name)) + return S + S = S.variables_parent + +/datum/scope/proc/push(datum/node/BlockDefinition/B, datum/scope/variables_parent = src, allowed_status = 0) + return new /datum/scope(B, src, variables_parent, allowed_status) + +/datum/scope/proc/pop(keep_status = (BREAKING | CONTINUING | RETURNING)) // keep_status is which flags you want to copy to the parent. + parent.status = (parent.status & ~keep_status) | (status & keep_status) + if(parent.status & RETURNING) + parent.return_val = return_val + return parent + +/datum/scope/proc/get_var(name, datum/n_Interpreter/interp, datum/node/node) + var/datum/scope/S = get_scope(name) + if(S) + return S.variables[name] + else if(interp) + interp.RaiseError(new /datum/runtimeError/UndefinedVariable(name), src, node) + +/datum/scope/proc/get_function(name) + var/datum/scope/S = src + while(S) + . = S.functions[name] + if(.) + return + S = S.variables_parent + +/datum/scope/proc/set_var(name, val, datum/n_Interpreter/interp, datum/node/node) + var/datum/scope/S = get_scope(name) + if(S) + S.variables[name] = val + else + init_var(name, val, interp, node) + return val + +/datum/scope/proc/init_var(name, val, datum/n_Interpreter/interp, datum/node/node) + if(variables.Find(name) && interp) + interp.RaiseError(new /datum/runtimeError/DuplicateVariableDeclaration(name), src, node) + variables[name] = val diff --git a/monkestation/code/modules/NTSL/code/coding_language/options.dm b/monkestation/code/modules/NTSL/code/coding_language/options.dm new file mode 100644 index 000000000000..35c07e5b8cc8 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/options.dm @@ -0,0 +1,119 @@ +#define ascii_A 65 +#define ascii_Z 90 +#define ascii_a 97 +#define ascii_z 122 +#define ascii_DOLLAR 36 // $ +#define ascii_ZERO 48 +#define ascii_NINE 57 +#define ascii_UNDERSCORE 95 // _ + +/* + * n_scriptOptions + */ +/datum/n_scriptOptions + ///scanner - Characters that can be in symbols + var/list/symbols = list( + "(", + ")", + "\[", + "]", + ";", + ",", + "{", + "}", + ".", + ) + /* + * Var: keywords + * An associative list used by the parser to parse keywords. Indices are strings which will trigger the keyword when parsed and the + * associated values are types of which the proc will be called. + */ + var/list/keywords = list( + "if" = /datum/n_Keyword/nS_Keyword/kwIf, + "else" = /datum/n_Keyword/nS_Keyword/kwElse, + "elseif" = /datum/n_Keyword/nS_Keyword/kwElseIf, + "while" = /datum/n_Keyword/nS_Keyword/kwWhile, + "break" = /datum/n_Keyword/nS_Keyword/kwBreak, + "continue" = /datum/n_Keyword/nS_Keyword/kwContinue, + "for" = /datum/n_Keyword/nS_Keyword/kwFor, + "return" = /datum/n_Keyword/nS_Keyword/kwReturn, + "def"= /datum/n_Keyword/nS_Keyword/kwDef, + ) + var/list/unary_operators = list( + "!" = /datum/node/expression/expression_operator/unary/LogicalNot, + "~" = /datum/node/expression/expression_operator/unary/BitwiseNot, + "-" = /datum/node/expression/expression_operator/unary/Minus, + ) + + var/list/binary_operators = list( + "==" = /datum/node/expression/expression_operator/binary/Equal, + "!=" = /datum/node/expression/expression_operator/binary/NotEqual, + ">" = /datum/node/expression/expression_operator/binary/Greater, + "<"= /datum/node/expression/expression_operator/binary/Less, + ">=" = /datum/node/expression/expression_operator/binary/GreaterOrEqual, + "<=" = /datum/node/expression/expression_operator/binary/LessOrEqual, + "&&" = /datum/node/expression/expression_operator/binary/LogicalAnd, + "||" = /datum/node/expression/expression_operator/binary/LogicalOr, + "&" = /datum/node/expression/expression_operator/binary/BitwiseAnd, + "|"= /datum/node/expression/expression_operator/binary/BitwiseOr, + "`" = /datum/node/expression/expression_operator/binary/BitwiseXor, + "+"= /datum/node/expression/expression_operator/binary/Add, + "-" = /datum/node/expression/expression_operator/binary/Subtract, + "*"= /datum/node/expression/expression_operator/binary/Multiply, + "/" = /datum/node/expression/expression_operator/binary/Divide, + "^"= /datum/node/expression/expression_operator/binary/Power, + "%" = /datum/node/expression/expression_operator/binary/Modulo, + "=" = /datum/node/expression/expression_operator/binary/Assign, + "&=" = /datum/node/expression/expression_operator/binary/Assign/BitwiseAnd, + "|=" = /datum/node/expression/expression_operator/binary/Assign/BitwiseOr, + "`=" = /datum/node/expression/expression_operator/binary/Assign/BitwiseXor, + "+=" = /datum/node/expression/expression_operator/binary/Assign/Add, + "-=" = /datum/node/expression/expression_operator/binary/Assign/Subtract, + "*=" = /datum/node/expression/expression_operator/binary/Assign/Multiply, + "/=" = /datum/node/expression/expression_operator/binary/Assign/Divide, + "^=" = /datum/node/expression/expression_operator/binary/Assign/Power, + "%=" = /datum/node/expression/expression_operator/binary/Assign/Modulo, + ) + +/datum/n_scriptOptions/New() + . = ..() + for(var/operators in binary_operators + unary_operators) + if(!symbols.Find(operators)) + symbols += operators + +///Returns TRUE if the character can start a variable, function, or keyword name (by default letters or an underscore) +/datum/n_scriptOptions/proc/CanStartID(char) + if(!isnum(char)) + char=text2ascii(char) + return (char in ascii_A to ascii_Z) || (char in ascii_a to ascii_z) || char==ascii_UNDERSCORE || char==ascii_DOLLAR + +///Returns TRUE if the character can be in the body of a variable, function, or keyword name (by default letters, numbers, and underscore) +/datum/n_scriptOptions/proc/IsValidIDChar(char) + if(!isnum(char)) + char=text2ascii(char) + return CanStartID(char) || IsDigit(char) + +/datum/n_scriptOptions/proc/IsDigit(char) + if(!isnum(char)) + char=text2ascii(char) + return char in ascii_ZERO to ascii_NINE + +///Returns TRUE if all the characters in the string are okay to be in an identifier name. +/datum/n_scriptOptions/proc/IsValidID(id) + if(!CanStartID(id)) //don't need to grab first char in id, since text2ascii does it automatically + return FALSE + if(length(id) == 1) + return TRUE + for(var/i = 2 to length(id)) + if(!IsValidIDChar(copytext(id, i, i+1))) + return FALSE + return TRUE + +#undef ascii_A +#undef ascii_Z +#undef ascii_a +#undef ascii_z +#undef ascii_DOLLAR +#undef ascii_ZERO +#undef ascii_NINE +#undef ascii_UNDERSCORE diff --git a/monkestation/code/modules/NTSL/code/coding_language/parser/expressions.dm b/monkestation/code/modules/NTSL/code/coding_language/parser/expressions.dm new file mode 100644 index 000000000000..4fd4f73204b9 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/parser/expressions.dm @@ -0,0 +1,341 @@ +/* + * Macros: Expression Macros + */ +///A value indicating the parser currently expects a binary operator. +#define OPERATOR 1 +///A value indicating the parser currently expects a value. +#define VALUE 2 +///Tells the parser to push the current operator onto the stack. +#define SHIFT 0 +///Tells the parser to reduce the stack. +#define REDUCE 1 + +/datum/n_Parser/nS_Parser + ///A variable which keeps track of whether an operator or value is expected. + ///It should be either or . See for more information. + var/expecting = VALUE + +///Compares two operators, decides which is higher in the order of operations, and returns or . +/datum/n_Parser/nS_Parser/proc/Precedence(datum/node/expression/expression_operator/top, datum/node/expression/expression_operator/input) + if(istype(top)) + top = top.precedence + if(istype(input)) + input = input.precedence + if(top >= input) + return REDUCE + return SHIFT + +///Takes a token expected to represent a value and returns an node. +/datum/n_Parser/nS_Parser/proc/GetExpression(datum/token/T) + if(!T) + return + if(istype(T, /datum/node/expression)) + return T + switch(T.type) + if(/datum/token/word) + return new /datum/node/expression/value/variable(T.value, T) + if(/datum/token/number, /datum/token/string) + return new /datum/node/expression/value/literal(T.value, T) + +/* + * GetOperator + * Gets a path related to a token or string and returns an instance of the given type. + * This is used to get an instance of either a binary or unary operator from a token. + * + * Arguments: + * O - The input value. If this is a token, O is reset to the token's value. + * When O is a string and is in L, its associated value is used as the path to instantiate. + * type - The desired type of the returned object. + * L - The list in which to search for O. + * + * See Also: + * - + * - + */ +/datum/n_Parser/nS_Parser/proc/GetOperator(O, type = /datum/node/expression/expression_operator, L[]) + var/datum/token/input_token + if(istype(O, type)) + return O + if(istype(O, /datum/token)) + input_token = O + O = input_token.value + if(istext(O)) + if(L.Find(O)) + O=L[O] + else + return null + if(input_token) + O = new O(input_token) + else + return null + return O + +/* + * GetBinaryOperator + * Uses to search for an instance of a binary operator type with which the given string is associated. For example, if + * O is set to "+", an node is returned. + * + * See Also: + * - + * - + */ +/datum/n_Parser/nS_Parser/proc/GetBinaryOperator(O) + return GetOperator(O, /datum/node/expression/expression_operator/binary, options.binary_operators) + +/* + * Proc: GetUnaryOperator + * Uses to search for an instance of a unary operator type with which the given string is associated. For example, if + * O is set to "!", a node is returned. + * + * See Also: + * - + * - + */ +/datum/n_Parser/nS_Parser/proc/GetUnaryOperator(O) + return GetOperator(O, /datum/node/expression/expression_operator/unary, options.unary_operators) + +/* + * Reduce + * Takes the operator on top of the opr stack and assigns its operand(s). Then this proc pushes the value of that operation to the top + * of the val stack. + */ +/datum/n_Parser/nS_Parser/proc/Reduce(datum/stack/opr, datum/stack/val, check_assignments = 1) + var/datum/node/expression/expression_operator/O = opr.Pop() + if(!O) return + if(!istype(O)) + errors += new /datum/scriptError("Error reducing expression - invalid operator.") + return + //Take O and assign its operands, popping one or two values from the val stack + //depending on whether O is a binary or unary operator. + if(istype(O, /datum/node/expression/expression_operator/binary)) + var/datum/node/expression/expression_operator/binary/B = O + B.exp2 = val.Pop() + B.exp =val.Pop() + val.Push(B) + if(check_assignments && istype(B, /datum/node/expression/expression_operator/binary/Assign) && !istype(B.exp, /datum/node/expression/value/variable) && !istype(B.exp, /datum/node/expression/member)) + errors += new /datum/scriptError/InvalidAssignment() + else + O.exp=val.Pop() + val.Push(O) + +/* + * EndOfExpression + * Returns true if the current token represents the end of an expression. + * + * Arguments: + * end - A list of values to compare the current token to. + */ +/datum/n_Parser/nS_Parser/proc/EndOfExpression(end[]) + if(!curToken) + return TRUE + if(istype(curToken, /datum/token/symbol) && end.Find(curToken.value)) + return TRUE + if(istype(curToken, /datum/token/end) && end.Find(/datum/token/end)) + return TRUE + return FALSE + +/* + * ParseExpression + * Uses the Shunting-yard algorithm to parse expressions. + * + * Notes: + * - When an opening parenthesis is found, then is called to handle it. + * - The variable helps distinguish unary operators from binary operators (for cases like the - operator, which can be either). + * + * Articles: + * - + * - + * + * See Also: + * - + * - + * - + */ +/datum/n_Parser/nS_Parser/proc/ParseExpression(list/end=list(/datum/token/end), list/ErrChars=list("{", "}"), check_functions = 0, check_assignments = 1) + var/datum/stack/opr = new + var/datum/stack/val = new + + expecting=VALUE + var/loop = 0 + while(TRUE) + loop++ + if(loop > 800) + errors += new /datum/scriptError("Too many nested tokens.") + return + + if(EndOfExpression(end)) + break + if(istype(curToken, /datum/token/symbol) && ErrChars.Find(curToken.value)) + errors += new /datum/scriptError/BadToken(curToken) + break + + + if(index>tokens.len) //End of File + errors += new /datum/scriptError/EndOfFile() + break + var/datum/token/ntok + if(index+1<=tokens.len) + ntok=tokens[index+1] + + if(istype(curToken, /datum/token/symbol) && curToken.value == "(") //Parse parentheses expression + if(expecting == VALUE) + val.Push(ParseParenExpression()) + else + // you can call *anything*! You can even call "2()". It'll runtime though so just don't please. + val.Push(ParseFunctionExpression(val.Pop())) + expecting = OPERATOR + else if(istype(curToken, /datum/token/symbol) && curToken.value == "." && ntok && istype(ntok, /datum/token/word)) + if(expecting == VALUE) + errors += new /datum/scriptError/ExpectedToken("expression", curToken) + NextToken() + continue + var/datum/node/expression/member/dot/E = new(curToken) + E.object = val.Pop() + NextToken() + E.id = new(curToken.value, curToken) + val.Push(E) + else if(istype(curToken, /datum/token/symbol) && curToken.value == "\[") + if(expecting == VALUE) + errors += new /datum/scriptError/ExpectedToken("expression", curToken) + NextToken() + continue + var/datum/node/expression/member/brackets/B = new(curToken) + B.object = val.Pop() + NextToken() + B.index = ParseExpression(list("]")) + val.Push(B) + else if(istype(curToken, /datum/token/symbol)) //Operator found. + var/datum/node/expression/expression_operator/curOperator //Figure out whether it is unary or binary and get a new instance. + if(expecting == OPERATOR) + curOperator=GetBinaryOperator(curToken) + if(!curOperator) + errors += new /datum/scriptError/ExpectedToken("operator", curToken) + NextToken() + continue + else + curOperator=GetUnaryOperator(curToken) + if(!curOperator) //given symbol isn't a unary operator + errors += new /datum/scriptError/ExpectedToken("expression", curToken) + NextToken() + continue + + if(opr.Top() && Precedence(opr.Top(), curOperator)==REDUCE) //Check order of operations and reduce if necessary + Reduce(opr, val, check_assignments) + continue + opr.Push(curOperator) + expecting = VALUE + else if(istype(curToken, /datum/token/word) && curToken.value == "list" && ntok && ntok.value == "(" && expecting == VALUE) + val.Push(ParseListExpression()) + else if(istype(curToken, /datum/token/keyword)) //inline keywords + var/datum/n_Keyword/kw = options.keywords[curToken.value] + kw = new kw(inline = 1) + if(kw) + if(!kw.Parse(src)) + return + else + errors += new /datum/scriptError/BadToken(curToken) + + else if(istype(curToken, /datum/token/end)) //semicolon found where it wasn't expected + errors += new /datum/scriptError/BadToken(curToken) + NextToken() + continue + else + if(expecting!=VALUE) + errors += new /datum/scriptError/ExpectedToken("operator", curToken) + NextToken() + continue + val.Push(GetExpression(curToken)) + expecting = OPERATOR + + NextToken() + + while(opr.Top()) + Reduce(opr, val, check_assignments) //Reduce the value stack completely + . = val.Pop() //Return what should be the last value on the stack + if(val.Top()) + var/datum/node/N = val.Pop() + errors += new /datum/scriptError("Error parsing expression. Unexpected value left on stack: [N.ToString()].") + return null + +///Parses a function call inside of an expression. (See also ) +/datum/n_Parser/nS_Parser/proc/ParseFunctionExpression(func_exp) + var/datum/node/expression/FunctionCall/exp = new(curToken) + exp.function = func_exp + NextToken() //skip open parenthesis, already found + var/loops = 0 + + while(TRUE) + loops++ + if(loops >= 800) + errors += new /datum/scriptError("Too many nested expressions.") + break + //CRASH("Something TERRIBLE has gone wrong in ParseFunctionExpression ;__;") + + if(istype(curToken, /datum/token/symbol) && curToken.value == ")") + return exp + exp.parameters += ParseParamExpression() + if(errors.len) + return exp + if(curToken.value == "," && istype(curToken, /datum/token/symbol)) + NextToken() //skip comma + if(istype(curToken, /datum/token/end)) //Prevents infinite loop... + errors += new /datum/scriptError/ExpectedToken(")") + return exp + +/datum/n_Parser/nS_Parser/proc/ParseListExpression() + var/datum/node/expression/value/list_init/exp = new(curToken) + exp.init_list = list() + NextToken() // skip the "list" word + NextToken() // skip the open parenthesis + var/loops = 0 + while(TRUE) + loops++ + if(loops >= 800) + errors += new /datum/scriptError("Too many nested expressions.") + break + + if(istype(curToken, /datum/token/symbol) && curToken.value == ")") + return exp + var/datum/node/expression/E = ParseParamExpression(check_assignments = FALSE) + if(E.type == /datum/node/expression/expression_operator/binary/Assign) + var/datum/node/expression/expression_operator/binary/Assign/A = E + exp.init_list[A.exp] = A.exp2 + else + exp.init_list += E + if(errors.len) + return exp + if(curToken.value == "," && istype(curToken, /datum/token/symbol)) + NextToken() //skip comma + if(istype(curToken, /datum/token/end)) //Prevents infinite loop... + errors += new /datum/scriptError/ExpectedToken(")") + return exp + +/* + * ParseParenExpression + * Parses an expression that ends with a close parenthesis. This is used for parsing expressions inside of parentheses. + * + * See Also: + * - + */ +/datum/n_Parser/nS_Parser/proc/ParseParenExpression() + var/group_token = curToken + if(!CheckToken("(", /datum/token/symbol)) + return + return new /datum/node/expression/expression_operator/unary/group(group_token, ParseExpression(list(")"))) + +/* + * Proc: ParseParamExpression + * Parses an expression that ends with either a comma or close parenthesis. This is used for parsing the parameters passed to a function call. + * + * See Also: + * - + */ +/datum/n_Parser/nS_Parser/proc/ParseParamExpression(check_functions = 0, check_assignments = 1) + var/cf = check_functions + var/ca = check_assignments + return ParseExpression(list(",", ")"), check_functions = cf, check_assignments = ca) + +#undef OPERATOR +#undef VALUE +#undef SHIFT +#undef REDUCE diff --git a/monkestation/code/modules/NTSL/code/coding_language/parser/keywords.dm b/monkestation/code/modules/NTSL/code/coding_language/parser/keywords.dm new file mode 100644 index 000000000000..3d26321e9672 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/parser/keywords.dm @@ -0,0 +1,222 @@ +/* + * File: Keywords + */ +#define KW_FAIL 0 //Fatal error; stop parsing entire script. +#define KW_PASS 1 //OK +#define KW_ERR 2 //Non-fatal error, keyword couldn't be handled properly. Ignore keyword but continue on. +#define KW_WARN 3 //Warning + +/* + * n_Keyword + * Represents a special statement in the code triggered by a keyword. + */ +/datum/n_Keyword + ///Boolean if the keyword is in an expression (e.g. the new keyword in many languages). + var/inline + +/datum/n_Keyword/New(inline = 0) + src.inline = inline + return ..() + +/* + * Parse + * Called when the parser finds a keyword in the code. + * + * Arguments: + * parser - The parser that created this object. + * You can use the parameter to manipulate the parser in order to add statements and blocks to its AST. + */ +/datum/n_Keyword/proc/Parse(datum/n_Parser/parser) + +/* + * nS_Keyword + * A keyword in n_Script. By default these include return, if, else, while, and def. To enable or disable a keyword, change the + * list. + * + * Behavior: + * When a parser is expecting a new statement, and a keyword listed in is found, it will call the keyword's + * proc. + */ +/datum/n_Keyword/nS_Keyword + +/datum/n_Keyword/nS_Keyword/New(inline = 0) + if(inline) + qdel(src) + +/datum/n_Keyword/nS_Keyword/kwReturn + +/datum/n_Keyword/nS_Keyword/kwReturn/Parse(datum/n_Parser/nS_Parser/parser) + . = KW_PASS + if(istype(parser.curBlock, /datum/node/BlockDefinition/GlobalBlock)) // Exit out of the program by setting the tokens list size to the same as index. + parser.tokens.len = parser.index + return + var/datum/node/statement/ReturnStatement/stmt = new(parser.curToken) + parser.NextToken() //skip 'return' token + stmt.value=parser.ParseExpression() + parser.curBlock.statements += stmt + +/datum/n_Keyword/nS_Keyword/kwIf + +/datum/n_Keyword/nS_Keyword/kwIf/Parse(datum/n_Parser/nS_Parser/parser) + . = KW_PASS + var/datum/node/statement/IfStatement/stmt = new(parser.curToken) + parser.NextToken() //skip 'if' token + stmt.cond=parser.ParseParenExpression() + if(!parser.CheckToken(")", /datum/token/symbol)) + return KW_FAIL + if(!parser.CheckToken("{", /datum/token/symbol, skip=0)) //datum/token needs to be preserved for parse loop, so skip=0 + return KW_ERR + parser.curBlock.statements += stmt + stmt.block=new + parser.AddBlock(stmt.block) + +/datum/n_Keyword/nS_Keyword/kwElseIf + +/datum/n_Keyword/nS_Keyword/kwElseIf/Parse(datum/n_Parser/nS_Parser/parser) + . = KW_PASS + var/list/L = parser.curBlock.statements + var/datum/node/statement/IfStatement/ifstmt + + if(L && L.len) + ifstmt = L[L.len] //Get the last statement in the current block + if(!ifstmt || !istype(ifstmt) || ifstmt.else_if) + parser.errors += new /datum/scriptError/ExpectedToken("if statement", parser.curToken) + return KW_FAIL + + var/datum/node/statement/IfStatement/ElseIf/stmt = new(parser.curToken) + parser.NextToken() //skip 'if' token + stmt.cond = parser.ParseParenExpression() + if(!parser.CheckToken(")", /datum/token/symbol)) + return KW_FAIL + if(!parser.CheckToken("{", /datum/token/symbol, skip = FALSE)) //datum/token needs to be preserved for parse loop, so skip=0 + return KW_ERR + parser.curBlock.statements += stmt + stmt.block = new + ifstmt.else_if = stmt + parser.AddBlock(stmt.block) + + +/datum/n_Keyword/nS_Keyword/kwElse + +/datum/n_Keyword/nS_Keyword/kwElse/Parse(datum/n_Parser/nS_Parser/parser) + . = KW_PASS + var/list/L = parser.curBlock.statements + var/datum/node/statement/IfStatement/stmt + if(L&&L.len) stmt=L[L.len] //Get the last statement in the current block + if(!stmt || !istype(stmt) || stmt.else_block) //Ensure that it is an if statement + parser.errors += new /datum/scriptError/ExpectedToken("if statement",parser.curToken) + return KW_FAIL + parser.NextToken() //skip 'else' token + if(!parser.CheckToken("{", /datum/token/symbol, skip=0)) + return KW_ERR + stmt.else_block=new() + parser.AddBlock(stmt.else_block) + +/datum/n_Keyword/nS_Keyword/kwWhile + +/datum/n_Keyword/nS_Keyword/kwWhile/Parse(datum/n_Parser/nS_Parser/parser) + . = KW_PASS + var/datum/node/statement/WhileLoop/stmt = new(parser.curToken) + parser.NextToken() //skip 'while' token + stmt.cond=parser.ParseParenExpression() + if(!parser.CheckToken(")", /datum/token/symbol)) + return KW_FAIL + if(!parser.CheckToken("{", /datum/token/symbol, skip=0)) + return KW_ERR + parser.curBlock.statements += stmt + stmt.block = new + parser.AddBlock(stmt.block) + +/datum/n_Keyword/nS_Keyword/kwFor + +/datum/n_Keyword/nS_Keyword/kwFor/Parse(datum/n_Parser/nS_Parser/parser) + . = KW_PASS + var/datum/node/statement/ForLoop/stmt = new(parser.curToken) + parser.NextToken() + if(!parser.CheckToken("(", /datum/token/symbol)) + return KW_FAIL + stmt.init = parser.ParseExpression() + if(!parser.CheckToken(";", /datum/token/end)) + return KW_FAIL + stmt.test = parser.ParseExpression() + if(!parser.CheckToken(";", /datum/token/end)) + return KW_FAIL + stmt.increment = parser.ParseExpression(list(")")) + if(!parser.CheckToken(")", /datum/token/symbol)) + return KW_FAIL + if(!parser.CheckToken("{", /datum/token/symbol, skip=0)) + return KW_ERR + parser.curBlock.statements += stmt + stmt.block = new + parser.AddBlock(stmt.block) + +/datum/n_Keyword/nS_Keyword/kwBreak + +/datum/n_Keyword/nS_Keyword/kwBreak/Parse(datum/n_Parser/nS_Parser/parser) + . = KW_PASS + if(istype(parser.curBlock, /datum/node/BlockDefinition/GlobalBlock)) + parser.errors += new /datum/scriptError/BadToken(parser.curToken) + . = KW_WARN + var/datum/node/statement/BreakStatement/stmt = new(parser.curToken) + parser.NextToken() //skip 'break' token + parser.curBlock.statements += stmt + +/datum/n_Keyword/nS_Keyword/kwContinue + +/datum/n_Keyword/nS_Keyword/kwContinue/Parse(datum/n_Parser/nS_Parser/parser) + . = KW_PASS + if(istype(parser.curBlock, /datum/node/BlockDefinition/GlobalBlock)) + parser.errors += new /datum/scriptError/BadToken(parser.curToken) + . = KW_WARN + var/datum/node/statement/ContinueStatement/stmt = new(parser.curToken) + parser.NextToken() //skip 'break' token + parser.curBlock.statements += stmt + +/datum/n_Keyword/nS_Keyword/kwDef + +/datum/n_Keyword/nS_Keyword/kwDef/Parse(datum/n_Parser/nS_Parser/parser) + . = KW_PASS + var/datum/node/statement/FunctionDefinition/def = new(parser.curToken) + parser.NextToken() //skip 'def' token + if(!parser.options.IsValidID(parser.curToken.value)) + parser.errors += new /datum/scriptError/InvalidID(parser.curToken) + return KW_FAIL + def.func_name=parser.curToken.value + parser.NextToken() + if(!parser.CheckToken("(", /datum/token/symbol)) + return KW_FAIL + while(TRUE) //for now parameters can be separated by whitespace - they don't need a comma in between + if(istype(parser.curToken, /datum/token/symbol)) + switch(parser.curToken.value) + if(",") + parser.NextToken() + if(")") + break + else + parser.errors += new /datum/scriptError/BadToken(parser.curToken) + return KW_ERR + + else if(istype(parser.curToken, /datum/token/word)) + def.parameters+=parser.curToken.value + parser.NextToken() + else + parser.errors += new /datum/scriptError/InvalidID(parser.curToken) + return KW_ERR + if(!parser.CheckToken(")", /datum/token/symbol)) + return KW_FAIL + + if(istype(parser.curToken, /datum/token/end)) //Function prototype + parser.curBlock.statements+=def + else if(parser.curToken.value == "{" && istype(parser.curToken, /datum/token/symbol)) + def.block = new + parser.curBlock.statements.Insert(1, def) // insert into the beginning so that all functions are defined first + parser.curBlock.functions[def.func_name]=def + parser.AddBlock(def.block) + else + parser.errors += new /datum/scriptError/BadToken(parser.curToken) + return KW_FAIL + +#undef KW_FAIL +#undef KW_PASS +#undef KW_ERR +#undef KW_WARN diff --git a/monkestation/code/modules/NTSL/code/coding_language/parser/parser.dm b/monkestation/code/modules/NTSL/code/coding_language/parser/parser.dm new file mode 100644 index 000000000000..b00a336e6747 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/parser/parser.dm @@ -0,0 +1,88 @@ +/* + * n_Parser + * An object that reads tokens and produces an AST (abstract syntax tree). + */ +/datum/n_Parser + ///The parser's current position in the token's list. + var/index = 1 + ///The token at in . + var/datum/token/curToken + var/datum/stack/blocks = new + var/datum/node/BlockDefinition/GlobalBlock/global_block = new + var/datum/node/BlockDefinition/curBlock + ///A list of tokens in the source code generated by a scanner. + var/list/tokens = new + ///A list of fatal errors found by the parser. If there are any items in this list, then it is not safe to run the returned AST. + var/list/errors = new + ////A list of non-fatal problems in the script. + var/list/warnings = new + +///Reads the tokens and returns the AST's node. Be sure to populate the tokens list before calling this procedure. +/datum/n_Parser/proc/Parse() + +///Sets to the next token in the list, or null if there are no more tokens. +/datum/n_Parser/proc/NextToken() + if(index >= tokens.len) + curToken = null + else + curToken = tokens[++index] + return curToken + +/* + * nS_Parser + * An implmentation of a parser for n_Script. + */ +/datum/n_Parser/nS_Parser + var/datum/n_scriptOptions/options + +/datum/n_Parser/nS_Parser/New(tokens[], datum/n_scriptOptions/options) + src.tokens = tokens + src.options = options + src.curBlock = global_block + return ..() + +/datum/n_Parser/nS_Parser/Parse() + ASSERT(tokens) + for(,index <= tokens.len, index++) + curToken = tokens[index] + switch(curToken.type) + if(/datum/token/keyword) + var/datum/n_Keyword/kw = options.keywords[curToken.value] + kw = new kw() + if(kw) + if(!kw.Parse(src)) + return + continue + if(/datum/token/symbol) + if(curToken.value == "}") + if(!EndBlock()) + errors += new /datum/scriptError/BadToken(curToken) + continue + continue + if(/datum/token/end) + continue + curBlock.statements += ParseExpression() + if(!istype(curToken, /datum/token/end)) + errors += new /datum/scriptError/ExpectedToken(";", curToken) + continue + + return global_block + +/datum/n_Parser/nS_Parser/proc/CheckToken(val, type, err = 1, skip = 1) + if(!curToken || !istype(curToken, type) || curToken.value != val) + if(err) + errors += new /datum/scriptError/ExpectedToken(val, curToken) + return FALSE + if(skip) + NextToken() + return TRUE + +/datum/n_Parser/nS_Parser/proc/AddBlock(datum/node/BlockDefinition/B) + blocks.Push(curBlock) + curBlock = B + +/datum/n_Parser/nS_Parser/proc/EndBlock() + if(curBlock == global_block) + return FALSE + curBlock = blocks.Pop() + return TRUE diff --git a/monkestation/code/modules/NTSL/code/coding_language/scanner/scanner.dm b/monkestation/code/modules/NTSL/code/coding_language/scanner/scanner.dm new file mode 100644 index 000000000000..8b635b3bddfa --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/scanner/scanner.dm @@ -0,0 +1,202 @@ +#define COLUMN_LOCATION (codepos-linepos) + +/* + * n_Scanner + * An object responsible for breaking up source code into tokens for use by the parser. + */ +/datum/n_Scanner + var/code + ///A list of fatal errors found by the scanner. If there are any items in this list, then it is not safe to parse the returned tokens. + var/list/errors = new + ///A list of non-fatal problems in the source code found by the scanner. + var/list/warnings = new + +///Loads source code. +/datum/n_Scanner/proc/LoadCode(c) + code = c + +///Gets the code from a file and calls LoadCode() +/datum/n_Scanner/proc/LoadCodeFromFile(f) + LoadCode(file2text(f)) + +///Runs the scanner and returns the resulting list of tokens. Ensure that has been called first. +/datum/n_Scanner/proc/Scan() + +/* + * nS_Scanner + * A scanner implementation for n_Script. + */ +/datum/n_Scanner/nS_Scanner + + ///The scanner's position in the source code. + var/codepos = 1 + var/line = 1 + var/linepos = 0 + var/datum/n_scriptOptions/options + + ///List of characters that end a statement. Each item may only be one character long. Default is a semicolon. + var/list/end_stmt = list(";") + ///List of characters that are ignored by the scanner. Default is whitespace. + var/list/ignore = list(" ", "\t", "\n") + ///List of characters that can start and end strings. Default is double and single quotes. + var/list/string_delim = list("\"", "'") + ///List of characters that denote the start of a new token. This list is automatically populated. + var/list/delim = new + + +/datum/n_Scanner/nS_Scanner/New(code, datum/n_scriptOptions/options) + . = ..() + src.options = options + src.ignore += ascii2text(13) //Carriage return + src.delim += ignore + options.symbols + end_stmt + string_delim + LoadCode(code) + +/datum/n_Scanner/nS_Scanner/Scan() + var/list/datum/token/tokens = new + for(, codepos <= length(code), codepos++) + var/char = copytext(code, codepos, codepos + 1) + var/twochar = copytext(code, codepos, codepos + 2) // For finding comment syntax + if(char == "\n") + line++ + linepos=codepos + + if(ignore.Find(char)) + continue + else if(twochar == "//" || twochar == "/*") + ReadComment() + else if(end_stmt.Find(char)) + tokens += new /datum/token/end(char, line, COLUMN_LOCATION) + else if(string_delim.Find(char)) + codepos++ //skip string delimiter + tokens += ReadString(char) + else if(options.CanStartID(char)) + tokens += ReadWord() + else if(options.IsDigit(char)) + tokens += ReadNumber() + else if(options.symbols.Find(char)) + tokens += ReadSymbol() + + codepos = initial(codepos) + line = initial(line) + linepos = initial(linepos) + return tokens + +/** + * ReadString + * Reads a string in the source code into a token. + * Arguments: + * start - The character used to start the string. + */ +/datum/n_Scanner/nS_Scanner/proc/ReadString(start) + var/buf + for(, codepos <= length(code), codepos++)//codepos to length(code)) + var/char=copytext(code, codepos, codepos+1) + switch(char) + if("\\") //Backslash (\) encountered in string + codepos++ //Skip next character in string, since it was escaped by a backslash + char=copytext(code, codepos, codepos+1) + switch(char) + if("\\") //Double backslash + buf += "\\" + if("n") //\n Newline + buf += "\n" + else + if(char == start) //\" Doublequote + buf += start + else //Unknown escaped text + buf += char + if("\n") + . = new /datum/token/string(buf, line, COLUMN_LOCATION) + errors += new /datum/scriptError("Unterminated string. Newline reached.", .) + line++ + linepos = codepos + break + else + if(char == start) //string delimiter found, end string + break + else + buf += char //Just a normal character in a string + if(!.) + return new /datum/token/string(buf, line, COLUMN_LOCATION) + +///Reads characters separated by an item in into a token. +/datum/n_Scanner/nS_Scanner/proc/ReadWord() + var/char = copytext(code, codepos, codepos+1) + var/buf + + while(!delim.Find(char) && codepos <= length(code)) + buf += char + char = copytext(code, ++codepos, codepos+1) + codepos-- //allow main Scan() proc to read the delimiter + if(options.keywords.Find(buf)) + return new /datum/token/keyword(buf, line, COLUMN_LOCATION) + else + return new /datum/token/word(buf, line, COLUMN_LOCATION) + +///Reads a symbol into a token. +/datum/n_Scanner/nS_Scanner/proc/ReadSymbol() + var/char = copytext(code, codepos, codepos+1) + var/buf + + while(options.symbols.Find(buf+char)) + buf += char + if(++codepos > length(code)) + break + char = copytext(code, codepos, codepos+1) + + codepos-- //allow main Scan() proc to read the next character + return new /datum/token/symbol(buf, line, COLUMN_LOCATION) + +///Reads a number into a token. +/datum/n_Scanner/nS_Scanner/proc/ReadNumber() + var/char = copytext(code, codepos, codepos+1) + var/buf + var/dec = 0 + + while(options.IsDigit(char) || (char == "." && !dec)) + if(char == ".") + dec = 1 + buf += char + codepos++ + char=copytext(code, codepos, codepos+1) + var/datum/token/number/T = new(buf, line, COLUMN_LOCATION) + if(isnull(text2num(buf))) + errors += new /datum/scriptError("Bad number: ", T) + T.value = 0 + codepos-- //allow main Scan() proc to read the next character + return T + +/* + * ReadComment + * Reads a comment. Wow. + * I'm glad I wrote this proc description for you to explain that. + * Unlike the other Read functions, this one doesn't have to return any tokens, + * since it's just "reading" comments. + * All it does is just pass var/codepos through the comments until it reaches the end of'em. + */ +/datum/n_Scanner/nS_Scanner/proc/ReadComment() + // Remember that we still have that $codepos "pointer" variable to use. + var/longeur = length(code) // So I don't call for var/code's length every while loop + + if(copytext(code, codepos, codepos+2) == "//") // If line comment + ++codepos // Eat the current comment start, halfway + while(++codepos <= longeur) // Second half of the eating, on the first eval + if(copytext(code, codepos, codepos+1) == "\n") // then stop on the newline + line++ + linepos=codepos + return + else // If long comment + ++codepos // Eat the current comment start, halfway + while(++codepos <= longeur) // Ditto, on the first eval + if(copytext(code, codepos, codepos+2) == "*/") // then stop on any */ 's' + ++codepos // Eat the comment end + //but not all of it, because the for-loop this is in + //will increment it again later. + return + else if(copytext(code, codepos, codepos+1) == "\n") // We still have to count line numbers! + line++ + linepos=codepos + //Else if the longcomment didn't end, do an error + errors += new /datum/scriptError/UnterminatedComment() + +#undef COLUMN_LOCATION diff --git a/monkestation/code/modules/NTSL/code/coding_language/scanner/token.dm b/monkestation/code/modules/NTSL/code/coding_language/scanner/token.dm new file mode 100644 index 000000000000..834e15e967d2 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/scanner/token.dm @@ -0,0 +1,32 @@ +/* + * Token + * Represents an entity and position in the source code. + */ +/datum/token + var/value + var/line + var/column + +/datum/token/New(value, line = 0, column = 0) + src.value = value + src.line = line + src.column = column + +/datum/token/string + +/datum/token/symbol + +/datum/token/word + +/datum/token/keyword + +/datum/token/number + +/datum/token/number/New() + . = ..() + if(isnum(value)) + return + src.value = text2num(value) + ASSERT(!isnull(value)) + +/datum/token/end diff --git a/monkestation/code/modules/NTSL/code/coding_language/stack.dm b/monkestation/code/modules/NTSL/code/coding_language/stack.dm new file mode 100644 index 000000000000..81b4719b3187 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/coding_language/stack.dm @@ -0,0 +1,25 @@ +/datum/stack + var/list/contents = new + +/datum/stack/proc/Push(value) + contents += value + +/datum/stack/proc/Pop() + if(!contents.len) + return null + . = contents[contents.len] + contents.len-- + +///returns the item on the top of the stack without removing it +/datum/stack/proc/Top() + if(!contents.len) + return null + return contents[contents.len] + +/datum/stack/proc/Copy() + var/datum/stack/new_stack = new() + new_stack.contents = contents.Copy() + return new_stack + +/datum/stack/proc/Clear() + contents.Cut() diff --git a/monkestation/code/modules/NTSL/code/global.dm b/monkestation/code/modules/NTSL/code/global.dm new file mode 100644 index 000000000000..b594cf17be1e --- /dev/null +++ b/monkestation/code/modules/NTSL/code/global.dm @@ -0,0 +1 @@ +GLOBAL_LIST_EMPTY(traffic_comps) diff --git a/monkestation/code/modules/NTSL/code/logging.dm b/monkestation/code/modules/NTSL/code/logging.dm new file mode 100644 index 000000000000..7f418904e11f --- /dev/null +++ b/monkestation/code/modules/NTSL/code/logging.dm @@ -0,0 +1,6 @@ +/datum/log_category/mechcomp + category = LOG_CATEGORY_NTSL + master_category = /datum/log_category/game + config_flag = /datum/config_entry/flag/log_ntsl + +/datum/config_entry/flag/log_ntsl diff --git a/monkestation/code/modules/NTSL/code/machinery/overrides.dm b/monkestation/code/modules/NTSL/code/machinery/overrides.dm new file mode 100644 index 000000000000..13641721cd0c --- /dev/null +++ b/monkestation/code/modules/NTSL/code/machinery/overrides.dm @@ -0,0 +1,7 @@ +/obj/machinery/computer/telecomms/server/Initialize(mapload) + .=..() + light_color = LIGHT_COLOR_GREEN + +/obj/machinery/computer/telecomms/monitor/Initialize(mapload) + .=..() + light_color = LIGHT_COLOR_GREEN diff --git a/monkestation/code/modules/NTSL/code/machinery/server.dm b/monkestation/code/modules/NTSL/code/machinery/server.dm new file mode 100644 index 000000000000..a9f667dcdf94 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/machinery/server.dm @@ -0,0 +1,92 @@ +/obj/item/radio/server + +/obj/item/radio/server/can_receive(frequency,levels) + return FALSE // The server's radio isn't for receiving, it's for outputting. For now. + +/obj/machinery/telecomms/server + //NTSL-related stuffs + var/datum/TCS_Compiler/Compiler // the compiler that compiles and runs the code + var/autoruncode = FALSE // 1 if the code is set to run every time a signal is picked up + var/list/memory = list() // stored memory, for mem() in NTSL + var/rawcode = "" // the code to compile (raw-ass text) + var/compiledcode = "" //the last compiled code (also raw-ass text) + var/obj/item/radio/server/server_radio // Allows the server to talk on the radio, via broadcast() in NTSL + var/last_signal = 0 // Marks the last time an NTSL script called signal() from this server, to stop spam. + var/list/compile_warnings = list() + //End-NTSL + COOLDOWN_DECLARE(compile_cooldown) + +//NTSL-related procs +/obj/machinery/telecomms/server/Initialize(mapload) + Compiler = new() + Compiler.Holder = src + server_radio = new() + . = ..() + +/obj/machinery/telecomms/server/proc/update_logs() + if(log_entries.len >= 400) // If so, start deleting at least, hopefully, one log entry + log_entries.Cut(1, 2) + /* + for(var/i = 1, i <= log_entries.len, i++) // locate the first garbage collectable log entry and remove it + var/datum/comm_log_entry/L = log_entries[i] + if(L.garbage_collector) + log_entries.Remove(L) + break + */ + +/obj/machinery/telecomms/server/proc/add_entry(content, input) + var/datum/comm_log_entry/log = new + var/identifier = num2text( rand(-1000,1000) + world.time ) + log.name = "[input] ([md5(identifier)])" + log.input_type = input + log.parameters["message"] = content + log_entries.Add(log) + update_logs() + + +/obj/machinery/telecomms/server/proc/setcode(t) + if(t) + if(istext(t)) + rawcode = t + +/obj/machinery/telecomms/server/proc/compile(mob/user = usr) + if(is_banned_from(user.ckey, "Network Admin")) + to_chat(user, span_warning("You are banned from using NTSL.")) + return "Unauthorized access." + if(Compiler) + if(!reject_bad_ntsl_text(rawcode, 20000, require_pretty = FALSE, allow_newline = TRUE, allow_code = TRUE)) + rawcode = null + return "Please use galactic common characters only." + if(!COOLDOWN_FINISHED(src, compile_cooldown)) + return "Servers are recharging, please wait." + var/list/compileerrors = Compiler.Compile(rawcode) + COOLDOWN_START(src, compile_cooldown, 2 SECONDS) + if(!compileerrors.len && (compiledcode != rawcode)) + user.log_message(rawcode, LOG_NTSL) + compiledcode = rawcode + if(user.mind.assigned_role == "Network Admin") //achivement description says only Network Admin gets the achivement + var/freq + if(freq_listening.len > 0) + freq = freq_listening[1] + else + freq = 1459 + var/atom/movable/M = new() + var/atom/movable/virtualspeaker/speaker = new(null, M, server_radio) + speaker.name = "Poly" + speaker.job = "" + var/datum/signal/subspace/vocal/signal = new(src, freq, speaker, /datum/language/common, "test", list(), ) + signal.data["server"] = src + Compiler.Run(signal) + if(signal.data["reject"] == TRUE) + signal.data["name"] = "" + signal.data["reject"] = FALSE + Compiler.Run(signal) + if(!signal.data["reject"] == FALSE) + user.client.give_award(/datum/award/achievement/jobs/Poly_silent, user) + else + for(var/sample in signal.data["spans"]) + if(sample == SPAN_COMMAND) + user.client.give_award(/datum/award/achievement/jobs/Poly_loud, user) + break // Not having this break leaves us open to a potential DoS attack. + return compileerrors +//end-NTSL diff --git a/monkestation/code/modules/NTSL/code/machinery/traffic_control.dm b/monkestation/code/modules/NTSL/code/machinery/traffic_control.dm new file mode 100644 index 000000000000..e5ceefc82c61 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/machinery/traffic_control.dm @@ -0,0 +1,335 @@ +/obj/item/circuitboard/computer/comm_traffic + name = "Telecommunications Traffic Control" + build_path = /obj/machinery/computer/telecomms/traffic + +/datum/design/board/traffic + name = "Computer Design (Traffic Console)" + desc = "Allows for the construction of Traffic Control Console." + id = "s_traffic" + build_path = /obj/item/circuitboard/computer/comm_traffic + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE + +/obj/machinery/computer/telecomms/traffic + name = "telecommunications traffic control console" + + var/screen = 0 // the screen number: + var/emagged = FALSE + var/list/servers = list() // the servers located by the computer + var/mob/editingcode + var/mob/lasteditor + var/list/viewingcode = list() + var/obj/machinery/telecomms/server/SelectedServer + + var/network = "NULL" // the network to probe + var/temp = "" // temporary feedback messages + + var/storedcode = "" // code stored + var/obj/item/card/id/auth = null + var/list/access_log = list() + var/process = 0 + circuit = /obj/item/circuitboard/computer/comm_traffic + + req_access = list(ACCESS_TCOMMS) // CHANGE TO TCOMMADMIN + +/obj/machinery/computer/telecomms/traffic/Initialize(mapload) + . = ..() + GLOB.traffic_comps += src + +/obj/machinery/computer/telecomms/traffic/Destroy() + GLOB.traffic_comps -= src + return ..() + +/obj/machinery/computer/telecomms/traffic/proc/stop_editing() + if(editingcode) + if(editingcode.client) + winshow(editingcode, "Telecomms IDE", 0) // hide the window! + editingcode.unset_machine() + editingcode = null + +/obj/machinery/computer/telecomms/traffic/process() + if(machine_stat & (NOPOWER|BROKEN)) + stop_editing() + return + + if(editingcode && editingcode.machine != src) + stop_editing() + return + + if(!editingcode) + if(length(viewingcode) > 0) + editingcode = pick(viewingcode) + viewingcode.Remove(editingcode) + return + + process = !process + if(!process) + return + + // loop if there's someone manning the keyboard + if(!editingcode.client) + stop_editing() + return + + // For the typer, the input is enabled. Buffer the typed text + storedcode = "[winget(editingcode, "tcscode", "text")]" + winset(editingcode, "tcscode", "is-disabled=false") + + // If the player's not manning the keyboard anymore, adjust everything + if(!in_range(editingcode, src) && !issilicon(editingcode) || editingcode.machine != src) + winshow(editingcode, "Telecomms IDE", 0) // hide the window! + editingcode = null + return + + // For other people viewing the typer type code, the input is disabled and they can only view the code + // (this is put in place so that there's not any magical shenanigans with 50 people inputting different code all at once) + + if(length(viewingcode)) + // This piece of code is very important - it escapes quotation marks so string aren't cut off by the input element + var/showcode = replacetext(storedcode, "\\\"", "\\\\\"") + showcode = replacetext(storedcode, "\"", "\\\"") + + for(var/mob/M in viewingcode) + + if( (M.machine == src && in_range(M, src) ) || issilicon(M)) + winset(M, "tcscode", "is-disabled=true") + winset(M, "tcscode", "text=\"[showcode]\"") + else + viewingcode.Remove(M) + winshow(M, "Telecomms IDE", 0) // hide the windows + + +/obj/machinery/computer/telecomms/traffic/ui_interact(mob/user) + if(..()) + return + user.set_machine(src) + var/dat = "Telecommunication Traffic Control
Telecommunications Traffic Control
" + dat += "
[(auth ? "AUTHED" : "NOT AUTHED")]: [(!auth ? "Insert ID" : auth)]
" + dat += "View System Log
" + + if(issilicon(user) || auth) + + switch(screen) + + + // --- Main Menu --- + + if(0) + dat += "
[temp]
" + dat += "
Current Network: [network]
" + if(servers.len) + dat += "
Detected Telecommunication Servers:
    " + for(var/obj/machinery/telecomms/T in servers) + dat += "
  • \ref[T] [T.name] ([T.id])
  • " + dat += "
" + dat += "
\[Flush Buffer\]" + + else + dat += "
No servers detected. Scan for servers: \[Scan\]" + + + // --- Viewing Server --- + + if(1) + if(SelectedServer) + dat += "
[temp]
" + dat += "
\[Main Menu\] \[Refresh\]
" + dat += "
Current Network: [network]" + dat += "
Selected Server: [SelectedServer.id]" + dat += "

" + dat += "
\[Edit Code\]" + dat += "
Signal Execution: " + if(SelectedServer.autoruncode) + dat += "ALWAYS" + else + dat += "NEVER" + else + screen = 0 + return + + dat += "" + user << browse(dat, "window=traffic_control;size=575x400") + onclose(user, "server_control") + + temp = "" + return + +/obj/machinery/computer/telecomms/traffic/proc/create_log(entry, mob/user) + var/id = null + if(issilicon(user) || isAI(user)) + id = "System Administrator" + else if(ispAI(user)) + id = "[user.name] (pAI)" + else + if(auth) + id = "[auth.registered_name] ([auth.assignment])" + else + return + access_log += "\[[get_timestamp()]\] [id] [entry]" + +/obj/machinery/computer/telecomms/traffic/proc/print_logs() + . = "

Traffic Control Telecomms System Log


" + for(var/entry in access_log) + . += entry + "
" + . += "" + return . + +/obj/machinery/computer/telecomms/traffic/Topic(href, href_list) + if(..()) + return + + + add_fingerprint(usr) + usr.set_machine(src) + + if(href_list["auth"]) + if(iscarbon(usr)) + var/mob/living/carbon/C = usr + if(!auth) + var/obj/item/card/id/I = C.get_active_held_item() + if(istype(I)) + if(check_access(I)) + if(!C.transferItemToLoc(I, src)) + return + auth = I + create_log("has logged in.", usr) + else + create_log("has logged out.", usr) + auth.loc = src.loc + C.put_in_hands(auth) + auth = null + updateUsrDialog() + return + + if(href_list["print"]) + usr << browse(print_logs(), "window=traffic_logs") + return + + if(!auth && !issilicon(usr) && !emagged) + to_chat(usr, span_danger("ACCESS DENIED.")) + return + + if(href_list["viewserver"]) + screen = 1 + for(var/obj/machinery/telecomms/T in servers) + if(T.id == href_list["viewserver"]) + SelectedServer = T + create_log("selected server [T.name]", usr) + break + if(href_list["operation"]) + create_log("has performed action: [href_list["operation"]].", usr) + switch(href_list["operation"]) + + if("release") + servers = list() + screen = 0 + + if("mainmenu") + screen = 0 + + if("scan") + if(servers.len > 0) + temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" + + else + for(var/obj/machinery/telecomms/server/T in range(25, src)) + if(T.network == network) + servers.Add(T) + + if(!servers.len) + temp = "- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -" + else + temp = "- [servers.len] SERVERS PROBED & BUFFERED -" + + screen = 0 + + if("editcode") + if(is_banned_from(usr.ckey, "Network Admin")) + to_chat(usr, span_warning("You are banned from using NTSL.")) + return + if(editingcode == usr) + return + if(usr in viewingcode) + return + if(!editingcode) + lasteditor = usr + editingcode = usr + winshow(editingcode, "Telecomms IDE", 1) // show the IDE + winset(editingcode, "tcscode", "is-disabled=false") + winset(editingcode, "tcscode", "text=\"\"") + var/showcode = replacetext(storedcode, "\\\"", "\\\\\"") + showcode = replacetext(storedcode, "\"", "\\\"") + winset(editingcode, "tcscode", "text=\"[showcode]\"") + + else + viewingcode.Add(usr) + winshow(usr, "Telecomms IDE", 1) // show the IDE + winset(usr, "tcscode", "is-disabled=true") + winset(editingcode, "tcscode", "text=\"\"") + var/showcode = replacetext(storedcode, "\"", "\\\"") + winset(usr, "tcscode", "text=\"[showcode]\"") + + if("togglerun") + SelectedServer.autoruncode = !(SelectedServer.autoruncode) + + if(href_list["network"]) + + var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) + + if(newnet && canAccess(usr)) + if(length(newnet) > 15) + temp = "- FAILED: NETWORK TAG STRING TOO LONG -" + + else + + network = newnet + screen = 0 + servers = list() + temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" + create_log("has set the network to [network].", usr) + + updateUsrDialog() + return + +/obj/machinery/computer/telecomms/traffic/attackby(obj/O, mob/user, params) + src.updateUsrDialog() + if(istype(O, /obj/item/card/id) && check_access(O) && user.transferItemToLoc(O, src)) + auth = O + create_log("has logged in.", usr) + else + ..() + +/obj/machinery/computer/telecomms/traffic/emag_act(mob/user, obj/item/card/emag/emag_card) + if(emagged) + return FALSE + playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) + emagged = TRUE + to_chat(user, span_notice("You you disable the security protocols.")) + +/obj/machinery/computer/telecomms/traffic/proc/canAccess(mob/user) + if(issilicon(user) || in_range(user, src)) + return 1 + return 0 + +/obj/machinery/computer/telecomms/traffic/AltClick(mob/user) + if(!user.can_perform_action(src, NEED_DEXTERITY)) + return + if(iscarbon(user)) + var/mob/living/carbon/C = user + if(!auth) + var/obj/item/card/id/I = C.get_active_held_item() + if(istype(I)) + if(check_access(I)) + if(!C.transferItemToLoc(I, src)) + return + auth = I + create_log("has logged in.", user) + else + create_log("has logged out.", user) + auth.forceMove(drop_location()) + C.put_in_hands(auth) + auth = null + updateUsrDialog() + return diff --git a/monkestation/code/modules/NTSL/code/misc_procs.dm b/monkestation/code/modules/NTSL/code/misc_procs.dm new file mode 100644 index 000000000000..a4cec8b5c9d3 --- /dev/null +++ b/monkestation/code/modules/NTSL/code/misc_procs.dm @@ -0,0 +1,55 @@ +/** + * YOGSTATION PREETY FILTER + * DEV NOTE: FOR NOW IM KEEPING IT OFF BUT IN THE FUTURE BEFORE THE PR GETS MERGED IT MAY BE LOOKED AT + * relevant yogstation paths: + * code/modules/admin/prettyfilter.dm + * config/pretty_filter.txt + */ + +GLOBAL_LIST_EMPTY(pretty_filter_items) + +/proc/isnotpretty(text) // A simpler version of pretty_filter(), where all it returns is whether it had to replace something or not. + //Useful for the "You fumble your words..." business. + for(var/line in GLOB.pretty_filter_items) + var/list/parts = splittext(line, "=") + var/pattern = parts[1] + var/regex/R = new(pattern, "ig") + if(R.Find(text)) //If found + return TRUE // Yes, it isn't pretty. + return FALSE // No, it is pretty. + +//Returns null if there is any bad text in the string +/proc/reject_bad_ntsl_text(text, max_length = 512, ascii_only = TRUE, require_pretty=TRUE, allow_newline=FALSE, allow_code=FALSE) + if(require_pretty && isnotpretty(text)) + return + var/char_count = 0 + var/non_whitespace = FALSE + var/lenbytes = length(text) + var/char = "" + for(var/i = 1, i <= lenbytes, i += length(char)) + char = text[i] + char_count++ + if(char_count > max_length) + return + switch(text2ascii(char)) + if(9, 62, 60, 92, 47) // tab, <, >, \, / + if(!allow_code) + return + if(10, 13) //Carriage returns (CR) and newline (NL) + if(!allow_newline) + return + if(0 to 8) + return + if(11, 12) + return + if(14 to 31) + return + if(32) + continue + if(127 to INFINITY) + if(ascii_only) + return + else + non_whitespace = TRUE + if(non_whitespace) + return text //only accepts the text if it has some non-spaces diff --git a/monkestation/code/modules/NTSL/code/readme.md b/monkestation/code/modules/NTSL/code/readme.md new file mode 100644 index 000000000000..f2557d6f1dab --- /dev/null +++ b/monkestation/code/modules/NTSL/code/readme.md @@ -0,0 +1,29 @@ +https://github.com/Monkestation/Monkestation2.0/ + +## \ + +MODULE ID: NTSL + +### Description: + +Allows people to change how comms work via NTSL +for example, adding in their job after their name + +### TG Proc/File Changes: + +- code\__DEFINES\achievements.dm -- Added poly achievement defines, since apparently we dont modularize dat +- code\__DEFINES\logging.dm -- Added NTSL log stuff +- code\datums\chatmessage.dm -- Added a if(!speaker); return; due to NTSL code apparently not passing a speaker, i think, maybe, idk +- code\game\machinery\telecomms\telecomunications.dm -- Added some logging if there's a wrong filter path +- code\game\machinery\telecomms\machines\server.dm -- Added stuff to make the servers actually compile NTSL +- interface\skin.dmf -- Added stuff to make NTSL code editing UI work... im sorry... i really need to turn it to TGUI + +### Defines: + +- code\__DEFINES\~monkestation\NTSL.dm + +### Credits: + +- Altoids1 -- Original author in 2019 +- JohnFulpWillard -- Doing a lot of stuff apparently +- Gboster-0 -- Porting to Monkestation, fixes diff --git a/tgstation.dme b/tgstation.dme index 0f7bb16c7d9a..8d458c54aecd 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -416,6 +416,7 @@ #include "code\__DEFINES\~monkestation\microfusion.dm" #include "code\__DEFINES\~monkestation\misc.dm" #include "code\__DEFINES\~monkestation\mobs.dm" +#include "code\__DEFINES\~monkestation\NTSL.dm" #include "code\__DEFINES\~monkestation\oozeling.dm" #include "code\__DEFINES\~monkestation\overwatch.dm" #include "code\__DEFINES\~monkestation\particles.dm" @@ -6741,6 +6742,34 @@ #include "monkestation\code\modules\modular_guns\components\gun_stat_modifiers.dm" #include "monkestation\code\modules\modular_guns\crafting\part_recipes.dm" #include "monkestation\code\modules\modular_guns\makeshift_effects\__base_effect.dm" +#include "monkestation\code\modules\NTSL\code\achievements.dm" +#include "monkestation\code\modules\NTSL\code\global.dm" +#include "monkestation\code\modules\NTSL\code\logging.dm" +#include "monkestation\code\modules\NTSL\code\misc_procs.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\Errors.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\Options.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\AST\ast_nodes.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\AST\block.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\AST\statement.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\AST\operators\binary_operators.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\AST\operators\unary_operators.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\client_verbs.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\stack.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\implementations\logic.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\implementations\telecomms_translator.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\interpreter\Evaluation.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\interpreter\Interaction.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\interpreter\Interpreter.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\interpreter\Objects.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\interpreter\Scope.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\parser\Expressions.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\parser\Keywords.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\parser\Parser.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\scanner\Scanner.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\scanner\token.dm" +#include "monkestation\code\modules\NTSL\code\machinery\overrides.dm" +#include "monkestation\code\modules\NTSL\code\machinery\server.dm" +#include "monkestation\code\modules\NTSL\code\machinery\traffic_control.dm" #include "monkestation\code\modules\ocean_content\department_consoles\engineering.dm" #include "monkestation\code\modules\ocean_content\fluff\barrier.dm" #include "monkestation\code\modules\ocean_content\fluff\base_turf_editor.dm" From 6c194d4e64cd0cfefe1ff673ed12a4dbdcba91e7 Mon Sep 17 00:00:00 2001 From: Gboster-0 <82319946+Gboster-0@users.noreply.github.com> Date: Sat, 8 Jun 2024 21:10:47 +0200 Subject: [PATCH 02/46] Fixes the .DME file, and updates readme.md with the pull number --- monkestation/code/modules/NTSL/code/readme.md | 2 +- tgstation.dme | 26 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/monkestation/code/modules/NTSL/code/readme.md b/monkestation/code/modules/NTSL/code/readme.md index f2557d6f1dab..60c7c4b3cfda 100644 --- a/monkestation/code/modules/NTSL/code/readme.md +++ b/monkestation/code/modules/NTSL/code/readme.md @@ -1,4 +1,4 @@ -https://github.com/Monkestation/Monkestation2.0/ +https://github.com/Monkestation/Monkestation2.0/pull/2199 ## \ diff --git a/tgstation.dme b/tgstation.dme index 8d458c54aecd..60909a3d792c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6746,26 +6746,26 @@ #include "monkestation\code\modules\NTSL\code\global.dm" #include "monkestation\code\modules\NTSL\code\logging.dm" #include "monkestation\code\modules\NTSL\code\misc_procs.dm" -#include "monkestation\code\modules\NTSL\code\coding_language\Errors.dm" -#include "monkestation\code\modules\NTSL\code\coding_language\Options.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\client_verbs.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\errors.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\options.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\stack.dm" #include "monkestation\code\modules\NTSL\code\coding_language\AST\ast_nodes.dm" #include "monkestation\code\modules\NTSL\code\coding_language\AST\block.dm" #include "monkestation\code\modules\NTSL\code\coding_language\AST\statement.dm" #include "monkestation\code\modules\NTSL\code\coding_language\AST\operators\binary_operators.dm" #include "monkestation\code\modules\NTSL\code\coding_language\AST\operators\unary_operators.dm" -#include "monkestation\code\modules\NTSL\code\coding_language\client_verbs.dm" -#include "monkestation\code\modules\NTSL\code\coding_language\stack.dm" #include "monkestation\code\modules\NTSL\code\coding_language\implementations\logic.dm" #include "monkestation\code\modules\NTSL\code\coding_language\implementations\telecomms_translator.dm" -#include "monkestation\code\modules\NTSL\code\coding_language\interpreter\Evaluation.dm" -#include "monkestation\code\modules\NTSL\code\coding_language\interpreter\Interaction.dm" -#include "monkestation\code\modules\NTSL\code\coding_language\interpreter\Interpreter.dm" -#include "monkestation\code\modules\NTSL\code\coding_language\interpreter\Objects.dm" -#include "monkestation\code\modules\NTSL\code\coding_language\interpreter\Scope.dm" -#include "monkestation\code\modules\NTSL\code\coding_language\parser\Expressions.dm" -#include "monkestation\code\modules\NTSL\code\coding_language\parser\Keywords.dm" -#include "monkestation\code\modules\NTSL\code\coding_language\parser\Parser.dm" -#include "monkestation\code\modules\NTSL\code\coding_language\scanner\Scanner.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\interpreter\evaluation.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\interpreter\interaction.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\interpreter\interpreter.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\interpreter\objects.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\interpreter\scope.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\parser\expressions.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\parser\keywords.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\parser\parser.dm" +#include "monkestation\code\modules\NTSL\code\coding_language\scanner\scanner.dm" #include "monkestation\code\modules\NTSL\code\coding_language\scanner\token.dm" #include "monkestation\code\modules\NTSL\code\machinery\overrides.dm" #include "monkestation\code\modules\NTSL\code\machinery\server.dm" From a4db863f2efa06305f63d620fbccb0fc201f6c09 Mon Sep 17 00:00:00 2001 From: Gboster-0 <82319946+Gboster-0@users.noreply.github.com> Date: Sat, 8 Jun 2024 21:53:49 +0200 Subject: [PATCH 03/46] adds poly achievement sprites --- icons/ui_icons/achievements/achievements.dmi | Bin 233319 -> 250367 bytes .../code/modules/NTSL/code/achievements.dm | 2 ++ 2 files changed, 2 insertions(+) diff --git a/icons/ui_icons/achievements/achievements.dmi b/icons/ui_icons/achievements/achievements.dmi index 80d37860846e74e9882c39a8599129b052eee2a0..01b3ca8fa25f33b16ca27d3a2e99a60d08ed5623 100644 GIT binary patch literal 250367 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Ǣ{I?|7GE-7Fu<8 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 vhP8f%ik72gW!#AtA?aXzRySHyl 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

~Mm;!y7}3ZBvR+H9H( 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

({he(`C$L6tER^7@8P_ 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 Yd~9 Date: Tue, 11 Jun 2024 06:49:43 +0200 Subject: [PATCH 07/46] fixes for jumpsuits and PDA --- .../code/modules/clothing/under/jobs/engineering.dm | 6 +++--- tgstation.dme | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/monkestation/code/modules/clothing/under/jobs/engineering.dm b/monkestation/code/modules/clothing/under/jobs/engineering.dm index 3af494ffc4fb..a1d0297f953f 100644 --- a/monkestation/code/modules/clothing/under/jobs/engineering.dm +++ b/monkestation/code/modules/clothing/under/jobs/engineering.dm @@ -1,8 +1,8 @@ /obj/item/clothing/under/rank/engineering/signal_tech - name = "engineer's jumpsuit" - desc = "It's an orange high visibility jumpsuit worn by engineers. Made from fire resistant materials." + name = "signal technician's jumpsuit" + desc = "It's an orange high visibility jumpsuit with green strips worn by signal technicians. Made from fire resistant materials." icon = 'monkestation/icons/obj/clothing/uniforms.dmi' worn_icon = 'monkestation/icons/mob/clothing/uniform.dmi' icon_state = "signal_tech" - inhand_icon_state = "engi_suit" + inhand_icon_state = "signal_tech" species_exception = list(/datum/species/golem/uranium) diff --git a/tgstation.dme b/tgstation.dme index aaa80983e71e..fa2ddf1092e2 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6684,6 +6684,7 @@ #include "monkestation\code\modules\modular_bartending\item_modifications\attack_additions.dm" #include "monkestation\code\modules\modular_bartending\item_modifications\reagent_modification.dm" #include "monkestation\code\modules\modular_bartending\reactions\food_reactions.dm" +#include "monkestation\code\modules\modular_computers\computers\item\role_tablet_presets.dm" #include "monkestation\code\modules\modular_computers\file_system\programs\crewmanifest.dm" #include "monkestation\code\modules\modular_guns\__base_attachment.dm" #include "monkestation\code\modules\modular_guns\__base_modular_gun.dm" From 3ac001113408dc6055f8e0eb99b733a7e5713199 Mon Sep 17 00:00:00 2001 From: Gboster-0 <82319946+Gboster-0@users.noreply.github.com> Date: Tue, 11 Jun 2024 14:29:16 +0200 Subject: [PATCH 08/46] le fix --- monkestation/code/modules/NTSL/code/logging.dm | 2 +- monkestation/code/modules/clothing/under/jobs/engineering.dm | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/monkestation/code/modules/NTSL/code/logging.dm b/monkestation/code/modules/NTSL/code/logging.dm index 7f418904e11f..b9c671f08d0a 100644 --- a/monkestation/code/modules/NTSL/code/logging.dm +++ b/monkestation/code/modules/NTSL/code/logging.dm @@ -1,4 +1,4 @@ -/datum/log_category/mechcomp +/datum/log_category/log_ntsl category = LOG_CATEGORY_NTSL master_category = /datum/log_category/game config_flag = /datum/config_entry/flag/log_ntsl diff --git a/monkestation/code/modules/clothing/under/jobs/engineering.dm b/monkestation/code/modules/clothing/under/jobs/engineering.dm index a1d0297f953f..cd557499961d 100644 --- a/monkestation/code/modules/clothing/under/jobs/engineering.dm +++ b/monkestation/code/modules/clothing/under/jobs/engineering.dm @@ -4,5 +4,4 @@ icon = 'monkestation/icons/obj/clothing/uniforms.dmi' worn_icon = 'monkestation/icons/mob/clothing/uniform.dmi' icon_state = "signal_tech" - inhand_icon_state = "signal_tech" species_exception = list(/datum/species/golem/uranium) From e5ca703cd5b827a55605966e7f229d3217fa48ec Mon Sep 17 00:00:00 2001 From: Gboster-0 <82319946+Gboster-0@users.noreply.github.com> Date: Tue, 25 Jun 2024 15:44:41 +0200 Subject: [PATCH 09/46] adds signal technician start landmarks --- _maps/map_files/Blueshift/Blueshift.dmm | 16 +++++++--------- _maps/map_files/BoxStation/BoxStation.dmm | 1 + .../map_files/Deltastation/DeltaStation2.dmm | 1 + .../map_files/IceBoxStation/IceBoxStation.dmm | 1 + _maps/map_files/KiloStation/KiloStation.dmm | 2 ++ _maps/map_files/MetaStation/MetaStation.dmm | 1 + _maps/map_files/tramstation/tramstation.dmm | 1 + icons/mob/landmarks.dmi | Bin 29159 -> 30904 bytes .../jobs/job_types/signal_technician.dm | 4 ++++ 9 files changed, 18 insertions(+), 9 deletions(-) diff --git a/_maps/map_files/Blueshift/Blueshift.dmm b/_maps/map_files/Blueshift/Blueshift.dmm index a3c509373e77..15c254ed1b64 100644 --- a/_maps/map_files/Blueshift/Blueshift.dmm +++ b/_maps/map_files/Blueshift/Blueshift.dmm @@ -28983,6 +28983,7 @@ "fBZ" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, +/obj/item/kirbyplants/organic/plant21, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "fCd" = ( @@ -32762,9 +32763,6 @@ pixel_x = 6; pixel_y = 16 }, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, /turf/open/floor/iron/white, /area/station/medical/virology) "gpr" = ( @@ -36182,7 +36180,9 @@ /turf/open/floor/iron, /area/station/science/ordnance) "gZw" = ( -/obj/item/kirbyplants/organic/plant21, +/obj/machinery/computer/telecomms/traffic{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "gZx" = ( @@ -46255,7 +46255,8 @@ cycle_id = "tcomms-internal" }, /obj/machinery/door/firedoor/heavy, -/obj/effect/mapping_helpers/airlock/access/all/command/general, +/obj/effect/mapping_helpers/airlock/access/any/engineering/tcoms, +/obj/effect/mapping_helpers/airlock/access/any/command/general, /turf/open/floor/iron, /area/station/tcommsat/computer) "jay" = ( @@ -111592,6 +111593,7 @@ "vEE" = ( /obj/structure/chair/office/light, /obj/machinery/light/floor/has_bulb, +/obj/effect/landmark/start/signal_technician, /turf/open/floor/iron, /area/station/tcommsat/computer) "vEF" = ( @@ -113720,10 +113722,6 @@ /obj/effect/turf_decal/bot, /obj/structure/cable, /obj/machinery/disease2/centrifuge, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, -/obj/item/reagent_containers/cup/beaker/vial, /turf/open/floor/iron, /area/station/medical/virology) "wax" = ( diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index fbaea978e4c0..a9e81607810b 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -15578,6 +15578,7 @@ dir = 8 }, /obj/structure/cable, +/obj/effect/landmark/start/signal_technician, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "fkC" = ( diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 141469b3c247..6c1df2de4c8d 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -90255,6 +90255,7 @@ /obj/structure/chair/office{ dir = 1 }, +/obj/effect/landmark/start/signal_technician, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) "vBB" = ( diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 739c0a0260e4..86d3535d87d9 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -47939,6 +47939,7 @@ dir = 8 }, /obj/structure/cable, +/obj/effect/landmark/start/signal_technician, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "ppE" = ( diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 5f74dc6ab4b1..0b269eeba6ca 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -40020,6 +40020,8 @@ }, /obj/machinery/light/small/directional/east, /obj/item/radio/intercom/directional/east, +/obj/effect/landmark/start/signal_technician, +/obj/structure/chair/office, /turf/open/floor/engine, /area/station/tcommsat/computer) "mLs" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 9f2f7e938a93..396aa3d5db24 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -38300,6 +38300,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, +/obj/effect/landmark/start/signal_technician, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) "nCw" = ( diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index ed22759d6e39..46de99ae2f0c 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -54696,6 +54696,7 @@ "qxZ" = ( /obj/structure/chair/office, /obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/landmark/start/signal_technician, /turf/open/floor/iron, /area/station/tcommsat/computer) "qya" = ( diff --git a/icons/mob/landmarks.dmi b/icons/mob/landmarks.dmi index b07ed7e09a725abdfe58957282be1c417f65ded9..f94069e7985e6db65d4c8304b3b28f49e0ad4b64 100644 GIT binary patch literal 30904 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

#rV5DKeJJTEfIf%*tM%#ojTzAh~hq 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 C=)NHU literal 29159 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 Bv$p^M diff --git a/monkestation/code/modules/jobs/job_types/signal_technician.dm b/monkestation/code/modules/jobs/job_types/signal_technician.dm index ae0974971ce4..89c2b3727270 100644 --- a/monkestation/code/modules/jobs/job_types/signal_technician.dm +++ b/monkestation/code/modules/jobs/job_types/signal_technician.dm @@ -47,6 +47,10 @@ "Telecomunications Engineer", ) +/obj/effect/landmark/start/signal_technician + name = JOB_SIGNAL_TECHNICIAN + icon_state = JOB_SIGNAL_TECHNICIAN + /datum/outfit/job/signal_tech name = "Signal Technician" jobtype = /datum/job/signal_technician From abcaae87d28b617bc8dc09205a55c330038ffb0d Mon Sep 17 00:00:00 2001 From: Gboster-0 <82319946+Gboster-0@users.noreply.github.com> Date: Thu, 27 Jun 2024 00:21:55 +0200 Subject: [PATCH 10/46] TGUI for the NTSL is now a thing --- .../NTSL/code/coding_language/client_verbs.dm | 241 ----------- .../modules/NTSL/code/machinery/server.dm | 8 +- .../NTSL/code/machinery/traffic_control.dm | 408 +++++++----------- tgstation.dme | 1 - tgui/packages/tgui/interfaces/NTSLCoding.js | 153 +++++++ 5 files changed, 314 insertions(+), 497 deletions(-) delete mode 100644 monkestation/code/modules/NTSL/code/coding_language/client_verbs.dm create mode 100644 tgui/packages/tgui/interfaces/NTSLCoding.js diff --git a/monkestation/code/modules/NTSL/code/coding_language/client_verbs.dm b/monkestation/code/modules/NTSL/code/coding_language/client_verbs.dm deleted file mode 100644 index a832e1c57fd5..000000000000 --- a/monkestation/code/modules/NTSL/code/coding_language/client_verbs.dm +++ /dev/null @@ -1,241 +0,0 @@ -/client/verb/tcssave() - set hidden = 1 - - if(is_banned_from(usr.ckey, "Network Admin")) - to_chat(usr, span_warning("You are banned from using NTSL.")) - return - if(!mob.machine && !issilicon(mob)) - src << output(null, "tcserror") - src << output("Failed to save: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") - if(!telecomms_check(mob)) - src << output(null, "tcserror") - src << output("Failed to save: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") - return - var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine - if(Machine.editingcode != mob) - return - - if(Machine.SelectedServer) - var/obj/machinery/telecomms/server/Server = Machine.SelectedServer - var/tcscode=winget(src, "tcscode", "text") - Server.setcode( tcscode ) // this actually saves the code from input to the server - src << output(null, "tcserror") // clear the errors - else - src << output(null, "tcserror") - src << output("Failed to save: Unable to locate server machine. (Back up your code before exiting the window!)", "tcserror") - -/client/verb/tcscompile() - set hidden = 1 - - if(is_banned_from(usr.ckey, "Network Admin")) - to_chat(usr, span_warning("You are banned from using NTSL.")) - return - if(!mob.machine && !issilicon(mob)) - src << output(null, "tcserror") - src << output("Failed to compile: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") - return - if(!telecomms_check(mob)) - src << output(null, "tcserror") - src << output("Failed to compile: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") - return - var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine - if(Machine.editingcode != mob) - return - if(!Machine.SelectedServer) - src << output(null, "tcserror") - src << output("Failed to compile: Unable to locate server machine. (Back up your code before exiting the window!)", "tcserror") - return - - var/obj/machinery/telecomms/server/Server = Machine.SelectedServer - Server.setcode( winget(src, "tcscode", "text") ) // save code first - - spawn(0) - // Output all the compile-time errors - src << output(null, "tcserror") - src << output("Compiling on [Server.name]...", "tcserror") - - var/list/compileerrors = Server.compile(mob) // then compile the code! this can return a string or a list. - if(!telecomms_check(mob)) - return - - if(!compileerrors) - src << output("NTSL.exe Error", "tcserror") - src << output("\t>A fatal error has occured. Please contact your local network adminstrator.", "tcserror") - else if(istext(compileerrors)) - src << output("NTSL.exe Error", "tcserror") - src << output("\t>[compileerrors]", "tcserror") - else if(length(compileerrors)) - src << output("Compile Errors", "tcserror") - var/i = 1 - for(var/datum/scriptError/e in compileerrors) - if(i) //. Bold the first one, since it's probably important - src << output("\t>[e.message]", "tcserror") - i = 0 - else - src << output("\t>[e.message]", "tcserror") - src << output("([compileerrors.len] errors)", "tcserror") - - // Output compile errors to all other people viewing the code too - for(var/mob/M in Machine.viewingcode) - if(M.client) - M << output(null, "tcserror") - M << output("Compile Errors", "tcserror") - i = 1 //. Still using var/i from above - for(var/datum/scriptError/e in compileerrors) - if(i) - M << output("\t>[e.message]", "tcserror") - i = 0 - else - M << output("\t>[e.message]", "tcserror") - M << output("([compileerrors.len] errors)", "tcserror") - - - else // Returned a blank list, means no errors. - src << output("TCS compilation successful!", "tcserror") - src << output("Time of compile: [gameTimestamp("hh:mm:ss")]","tcserror") - //. ^ To make it obvious that it's done a new compile - src << output("(0 errors)", "tcserror") - - for(var/mob/M in Machine.viewingcode) - if(M.client) - M << output("TCS compilation successful!", "tcserror") - M << output("Time of compile: [gameTimestamp("hh:mm:ss")]","tcserror") - M << output("(0 errors)", "tcserror") - if(Server.compile_warnings.len) - src << output("Compile Warnings", "tcserror") - for(var/datum/scriptError/e in Server.compile_warnings) - src << output("\t>[e.message]", "tcserror") - src << output("([Server.compile_warnings.len] warnings)", "tcserror") - for(var/fuck_you_for_making_me_do_this_altoids in Machine.viewingcode) - var/mob/M = fuck_you_for_making_me_do_this_altoids - if(M.client) - M << output("Compile Warnings", "tcserror") - for(var/datum/scriptError/e in Server.compile_warnings) - M << output("\t>[e.message]", "tcserror") - M << output("([Server.compile_warnings.len] warnings)", "tcserror") - -/client/verb/tcsrun() - set hidden = 1 - - if(is_banned_from(usr.ckey, "Network Admin")) - to_chat(usr, span_warning("You are banned from using NTSL.")) - return - if(!mob.machine && !issilicon(mob)) - src << output(null, "tcserror") - src << output("Failed to run: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") - return - if(!telecomms_check(mob)) - src << output(null, "tcserror") - src << output("Failed to run: Unable to locate machine. (Back up your code before exiting the window!)", "tcserror") - return - var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine - if(Machine.editingcode != mob) - return - if(!Machine.SelectedServer) - src << output(null, "tcserror") - src << output("Failed to run: Unable to locate server machine. (Back up your code before exiting the window!)", "tcserror") - return - - var/obj/machinery/telecomms/server/Server = Machine.SelectedServer - var/datum/signal/signal = new() - signal.data["message"] = "" - if(Server.freq_listening.len > 0) - signal.frequency = Server.freq_listening[1] - else - signal.frequency = 1459 - signal.data["name"] = "" - signal.data["job"] = "" - signal.data["reject"] = FALSE - signal.data["server"] = Server - Server.Compiler.Run(signal) - -/client/verb/exittcs() - set hidden = 1 - - if(is_banned_from(usr.ckey, "Network Admin")) - to_chat(usr, span_warning("You are banned from using NTSL.")) - return - if(!mob.machine && !issilicon(mob)) - return - if(!telecomms_check(mob)) - return - var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine - if(Machine.editingcode == mob) - Machine.storedcode = "[winget(mob, "tcscode", "text")]" - Machine.editingcode = null - else if(mob in Machine.viewingcode) - Machine.viewingcode.Remove(mob) - -/client/verb/tcsrevert() - set hidden = 1 - - if(is_banned_from(usr.ckey, "Network Admin")) - to_chat(usr, span_warning("You are banned from using NTSL.")) - return - if(!mob.machine && !issilicon(mob)) - src << output(null, "tcserror") - src << output("Failed to revert: Unable to locate machine.", "tcserror") - return - if(!telecomms_check(mob)) - src << output(null, "tcserror") - src << output("Failed to revert: Unable to locate machine.", "tcserror") - return - var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine - if(Machine.editingcode != mob) - return - if(!Machine.SelectedServer) - src << output(null, "tcserror") - src << output("Failed to revert: Unable to locate server machine.", "tcserror") - return - - var/obj/machinery/telecomms/server/Server = Machine.SelectedServer - // Replace quotation marks with quotation macros for proper winset() compatibility - var/showcode = replacetext(Server.rawcode, "\\\"", "\\\\\"") - showcode = replacetext(showcode, "\"", "\\\"") - winset(mob, "tcscode", "text=\"[showcode]\"") - src << output(null, "tcserror") // clear the errors - -/client/verb/tcsclearmem() - set hidden = 1 - - if(is_banned_from(usr.ckey, "Network Admin")) - to_chat(usr, span_warning("You are banned from using NTSL.")) - return - if(!mob.machine && !issilicon(mob)) - src << output(null, "tcserror") - src << output("Failed to clear memory: Unable to locate machine.", "tcserror") - return - if(!telecomms_check(mob)) - src << output(null, "tcserror") - src << output("Failed to clear memory: Unable to locate machine.", "tcserror") - return - var/obj/machinery/computer/telecomms/traffic/Machine = mob.machine - if(Machine.editingcode != mob) - return - if(!Machine.SelectedServer) - src << output(null, "tcserror") - src << output("Failed to clear memory: Unable to locate server machine.", "tcserror") - return - - var/obj/machinery/telecomms/server/Server = Machine.SelectedServer - Server.memory = list() // clear the memory - // Show results - //// Write shitty code comments - src << output(null, "tcserror") - src << output("Server memory cleared!", "tcserror") - for(var/mob/M in Machine.viewingcode) - if(M.client) - M << output("Server memory cleared!", "tcserror") - -/** - * Checks to see if 'mob_checking''s machine is a traffic control computer they can access. - */ -/proc/telecomms_check(mob/mob_checking) - if(!mob_checking) - return FALSE - if(!istype(mob_checking.machine, /obj/machinery/computer/telecomms/traffic)) - return FALSE - if(!issilicon(mob_checking) && !in_range(mob_checking.machine, mob_checking)) - return FALSE - - return TRUE diff --git a/monkestation/code/modules/NTSL/code/machinery/server.dm b/monkestation/code/modules/NTSL/code/machinery/server.dm index a9f667dcdf94..8275fdf1dba6 100644 --- a/monkestation/code/modules/NTSL/code/machinery/server.dm +++ b/monkestation/code/modules/NTSL/code/machinery/server.dm @@ -43,12 +43,6 @@ log_entries.Add(log) update_logs() - -/obj/machinery/telecomms/server/proc/setcode(t) - if(t) - if(istext(t)) - rawcode = t - /obj/machinery/telecomms/server/proc/compile(mob/user = usr) if(is_banned_from(user.ckey, "Network Admin")) to_chat(user, span_warning("You are banned from using NTSL.")) @@ -64,7 +58,7 @@ if(!compileerrors.len && (compiledcode != rawcode)) user.log_message(rawcode, LOG_NTSL) compiledcode = rawcode - if(user.mind.assigned_role == "Network Admin") //achivement description says only Network Admin gets the achivement + if(user.mind.assigned_role == "Network Admin") //achivement description says only Signal Technician gets the achivement var/freq if(freq_listening.len > 0) freq = freq_listening[1] diff --git a/monkestation/code/modules/NTSL/code/machinery/traffic_control.dm b/monkestation/code/modules/NTSL/code/machinery/traffic_control.dm index 75e65d215342..13faf86c2a79 100644 --- a/monkestation/code/modules/NTSL/code/machinery/traffic_control.dm +++ b/monkestation/code/modules/NTSL/code/machinery/traffic_control.dm @@ -13,27 +13,54 @@ departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /obj/machinery/computer/telecomms/traffic - name = "telecommunications traffic control console" + name = "traffic control computer" + desc = "A computer used to interface with the programming of communication servers." - var/screen = 0 // the screen number: var/emagged = FALSE - var/list/servers = list() // the servers located by the computer - var/mob/editingcode - var/mob/lasteditor + var/list/servers = list() // the servers located by the computer var/list/viewingcode = list() - var/obj/machinery/telecomms/server/SelectedServer - var/network = "NULL" // the network to probe - var/temp = "" // temporary feedback messages + var/network = "NULL" // the network to probe + var/temp = "" // temporary feedback messages - var/storedcode = "" // code stored + var/storedcode = "" // code stored var/obj/item/card/id/auth = null var/list/access_log = list() var/process = 0 + + + + var/mob/code_editor + var/obj/machinery/telecomms/server/SelectedServer + + var/code_errors + var/code_warnings + circuit = /obj/item/circuitboard/computer/comm_traffic req_access = list(ACCESS_TCOMMS_ADMIN) +// Confirm that the current user can use NTSL and its related functions +/obj/machinery/computer/telecomms/traffic/proc/isAuthorized(mob/user) + if(!istype(user)) + return FALSE + + if(is_banned_from(user.ckey, "Signal Technician")) + to_chat(user, span_warning("You are banned from using the NTSL console")) + return FALSE + + if(!SelectedServer) + to_chat(user, span_warning("No selected server detected")) + return FALSE + + if(issilicon(user)) + return TRUE + + if((emagged || auth) && in_range(user, src)) + return TRUE + + return FALSE + /obj/machinery/computer/telecomms/traffic/Initialize(mapload) . = ..() GLOB.traffic_comps += src @@ -42,119 +69,125 @@ GLOB.traffic_comps -= src return ..() -/obj/machinery/computer/telecomms/traffic/proc/stop_editing() - if(editingcode) - if(editingcode.client) - winshow(editingcode, "Telecomms IDE", 0) // hide the window! - editingcode.unset_machine() - editingcode = null - -/obj/machinery/computer/telecomms/traffic/process() - if(machine_stat & (NOPOWER|BROKEN)) - stop_editing() +/obj/machinery/computer/telecomms/traffic/ui_interact(mob/user, datum/tgui/ui) + . = ..() + ui = SStgui.try_update_ui(user, src, ui) + if(ui) return - if(editingcode && editingcode.machine != src) - stop_editing() - return + ui = new(user, src, "NTSLCoding") + ui.open() + ui.set_autoupdate(TRUE) - if(!editingcode) - if(length(viewingcode) > 0) - editingcode = pick(viewingcode) - viewingcode.Remove(editingcode) - return +/datum/asset/simple/telecomms + assets = list( + "server.png" = icon('icons/obj/machines/telecomms.dmi', "comm_server"), + ) - process = !process - if(!process) - return +/obj/machinery/computer/telecomms/traffic/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/simple/telecomms), + ) - // loop if there's someone manning the keyboard - if(!editingcode.client) - stop_editing() - return +/obj/machinery/computer/telecomms/traffic/ui_static_data(mob/user) + var/list/data = list() - // For the typer, the input is enabled. Buffer the typed text - storedcode = "[winget(editingcode, "tcscode", "text")]" - winset(editingcode, "tcscode", "is-disabled=false") + var/list/detected_servers = list() + for(var/obj/machinery/telecomms/server in servers) + detected_servers += list(list( + "name" = server.name, + "frequency" = server.freq_listening.len == 1 ? server.freq_listening[1] : 1459, + )) + data["detected_servers"] = detected_servers - // If the player's not manning the keyboard anymore, adjust everything - if(!in_range(editingcode, src) && !issilicon(editingcode) || editingcode.machine != src) - winshow(editingcode, "Telecomms IDE", 0) // hide the window! - editingcode = null - return + data["selected_server_name"] = SelectedServer ? SelectedServer.name : FALSE + data["selected_server_autorun"] = SelectedServer ? SelectedServer.autoruncode : FALSE - // For other people viewing the typer type code, the input is disabled and they can only view the code - // (this is put in place so that there's not any magical shenanigans with 50 people inputting different code all at once) + data["network"] = network - if(length(viewingcode)) - // This piece of code is very important - it escapes quotation marks so string aren't cut off by the input element - var/showcode = replacetext(storedcode, "\\\"", "\\\\\"") - showcode = replacetext(storedcode, "\"", "\\\"") + data["Authenticated"] = !isnull(auth) ? TRUE : FALSE - for(var/mob/M in viewingcode) + data["code"] = storedcode + data["errors"] = code_errors ? code_errors : FALSE + data["warnings"] = code_warnings ? code_warnings : FALSE - if( (M.machine == src && in_range(M, src) ) || issilicon(M)) - winset(M, "tcscode", "is-disabled=true") - winset(M, "tcscode", "text=\"[showcode]\"") - else - viewingcode.Remove(M) - winshow(M, "Telecomms IDE", 0) // hide the windows + data["temp"] = temp + return data -/obj/machinery/computer/telecomms/traffic/ui_interact(mob/user) - if(..()) +/obj/machinery/computer/telecomms/traffic/ui_act(action, list/params) + . = ..() + if(.) return - user.set_machine(src) - var/dat = "Telecommunication Traffic Control
Telecommunications Traffic Control
" - dat += "
[(auth ? "AUTHED" : "NOT AUTHED")]: [(!auth ? "Insert ID" : auth)]
" - dat += "View System Log
" - - if(issilicon(user) || auth) - - switch(screen) - - - // --- Main Menu --- - - if(0) - dat += "
[temp]
" - dat += "
Current Network: [network]
" - if(servers.len) - dat += "
Detected Telecommunication Servers:
    " - for(var/obj/machinery/telecomms/T in servers) - dat += "
  • \ref[T] [T.name] ([T.id])
  • " - dat += "
" - dat += "
\[Flush Buffer\]" - - else - dat += "
No servers detected. Scan for servers: \[Scan\]" - - - // --- Viewing Server --- - - if(1) - if(SelectedServer) - dat += "
[temp]
" - dat += "
\[Main Menu\] \[Refresh\]
" - dat += "
Current Network: [network]" - dat += "
Selected Server: [SelectedServer.id]" - dat += "

" - dat += "
\[Edit Code\]" - dat += "
Signal Execution: " - if(SelectedServer.autoruncode) - dat += "ALWAYS" - else - dat += "NEVER" - else - screen = 0 - return - dat += "" - user << browse(dat, "window=traffic_control;size=575x400") - onclose(user, "server_control") + playsound(src, "terminal_type", 15, FALSE) + switch(action) + if("Change Network") + network = params["network"] + servers = list() + for(var/obj/machinery/telecomms/server/server in range(25, src)) + if(server.network == network) + servers += server + + if(!servers.len) + temp = "Minor Error: Failed to find servers in the network \"[network]\"" + else + temp = "[servers.len] probed and buffered successfully!" + + update_static_data_for_all_viewers() + + if("Select Server") + for(var/obj/machinery/telecomms/server/server in servers) + if(server.name == params["server"]) + SelectedServer = server + break + + update_static_data_for_all_viewers() + + if("Toggle Autorun") + SelectedServer.autoruncode = !(SelectedServer.autoruncode) + update_static_data_for_all_viewers() + + if("Save Code") + if(!isAuthorized(usr)) + return + + if(!params["code"] || !istext(params["code"])) + return + + storedcode = params["code"] + SelectedServer.rawcode = params["code"] + update_static_data_for_all_viewers() - temp = "" - return + if("Compile Code") + if(!isAuthorized(usr)) + return + + var/mob/player = usr + + + var/list/compiling_errors = SelectedServer.compile(player) + + if(!compiling_errors) + code_errors = "!!FATAL ERROR DETECTED!! Error could not be cached, please contact your local Signal Technician for immediate assistance" + + else if(istext(compiling_errors)) + code_errors = compiling_errors + + else if(length(compiling_errors)) + code_errors = "" + for(var/datum/scriptError/error in compiling_errors) + code_errors = "[code_errors]\n[error.message]" + + else // Returned a blank list, means no errors. + code_errors = FALSE + + if(SelectedServer.compile_warnings.len) + code_warnings = "" + for(var/datum/scriptError/error in SelectedServer.compile_warnings) + code_warnings = "[code_warnings]\n[error.message]" + + update_static_data_for_all_viewers() /obj/machinery/computer/telecomms/traffic/proc/create_log(entry, mob/user) var/id = null @@ -169,130 +202,6 @@ return access_log += "\[[get_timestamp()]\] [id] [entry]" -/obj/machinery/computer/telecomms/traffic/proc/print_logs() - . = "

Traffic Control Telecomms System Log


" - for(var/entry in access_log) - . += entry + "
" - . += "" - return . - -/obj/machinery/computer/telecomms/traffic/Topic(href, href_list) - if(..()) - return - - - add_fingerprint(usr) - usr.set_machine(src) - - if(href_list["auth"]) - if(iscarbon(usr)) - var/mob/living/carbon/C = usr - if(!auth) - var/obj/item/card/id/I = C.get_active_held_item() - if(istype(I)) - if(check_access(I)) - if(!C.transferItemToLoc(I, src)) - return - auth = I - create_log("has logged in.", usr) - else - create_log("has logged out.", usr) - auth.loc = src.loc - C.put_in_hands(auth) - auth = null - updateUsrDialog() - return - - if(href_list["print"]) - usr << browse(print_logs(), "window=traffic_logs") - return - - if(!auth && !issilicon(usr) && !emagged) - to_chat(usr, span_danger("ACCESS DENIED.")) - return - - if(href_list["viewserver"]) - screen = 1 - for(var/obj/machinery/telecomms/T in servers) - if(T.id == href_list["viewserver"]) - SelectedServer = T - create_log("selected server [T.name]", usr) - break - if(href_list["operation"]) - create_log("has performed action: [href_list["operation"]].", usr) - switch(href_list["operation"]) - - if("release") - servers = list() - screen = 0 - - if("mainmenu") - screen = 0 - - if("scan") - if(servers.len > 0) - temp = "- FAILED: CANNOT PROBE WHEN BUFFER FULL -" - - else - for(var/obj/machinery/telecomms/server/T in range(25, src)) - if(T.network == network) - servers.Add(T) - - if(!servers.len) - temp = "- FAILED: UNABLE TO LOCATE SERVERS IN \[[network]\] -" - else - temp = "- [servers.len] SERVERS PROBED & BUFFERED -" - - screen = 0 - - if("editcode") - if(is_banned_from(usr.ckey, "Network Admin")) - to_chat(usr, span_warning("You are banned from using NTSL.")) - return - if(editingcode == usr) - return - if(usr in viewingcode) - return - if(!editingcode) - lasteditor = usr - editingcode = usr - winshow(editingcode, "Telecomms IDE", 1) // show the IDE - winset(editingcode, "tcscode", "is-disabled=false") - winset(editingcode, "tcscode", "text=\"\"") - var/showcode = replacetext(storedcode, "\\\"", "\\\\\"") - showcode = replacetext(storedcode, "\"", "\\\"") - winset(editingcode, "tcscode", "text=\"[showcode]\"") - - else - viewingcode.Add(usr) - winshow(usr, "Telecomms IDE", 1) // show the IDE - winset(usr, "tcscode", "is-disabled=true") - winset(editingcode, "tcscode", "text=\"\"") - var/showcode = replacetext(storedcode, "\"", "\\\"") - winset(usr, "tcscode", "text=\"[showcode]\"") - - if("togglerun") - SelectedServer.autoruncode = !(SelectedServer.autoruncode) - - if(href_list["network"]) - - var/newnet = stripped_input(usr, "Which network do you want to view?", "Comm Monitor", network) - - if(newnet && canAccess(usr)) - if(length(newnet) > 15) - temp = "- FAILED: NETWORK TAG STRING TOO LONG -" - - else - - network = newnet - screen = 0 - servers = list() - temp = "- NEW NETWORK TAG SET IN ADDRESS \[[network]\] -" - create_log("has set the network to [network].", usr) - - updateUsrDialog() - return - /obj/machinery/computer/telecomms/traffic/attackby(obj/O, mob/user, params) src.updateUsrDialog() if(istype(O, /obj/item/card/id) && check_access(O) && user.transferItemToLoc(O, src)) @@ -301,12 +210,15 @@ else ..() + update_static_data_for_all_viewers() + /obj/machinery/computer/telecomms/traffic/emag_act(mob/user, obj/item/card/emag/emag_card) if(emagged) return FALSE playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) emagged = TRUE to_chat(user, span_notice("You you disable the security protocols.")) + update_static_data_for_all_viewers() /obj/machinery/computer/telecomms/traffic/proc/canAccess(mob/user) if(issilicon(user) || in_range(user, src)) @@ -314,22 +226,22 @@ return 0 /obj/machinery/computer/telecomms/traffic/AltClick(mob/user) - if(!user.can_perform_action(src, NEED_DEXTERITY)) - return - if(iscarbon(user)) - var/mob/living/carbon/C = user - if(!auth) - var/obj/item/card/id/I = C.get_active_held_item() - if(istype(I)) - if(check_access(I)) - if(!C.transferItemToLoc(I, src)) - return - auth = I - create_log("has logged in.", user) - else - create_log("has logged out.", user) - auth.forceMove(drop_location()) - C.put_in_hands(auth) - auth = null - updateUsrDialog() + if(!user.can_perform_action(src, NEED_DEXTERITY) || !iscarbon(user)) return + + var/mob/living/carbon/C = user + if(!auth) + var/obj/item/card/id/I = C.get_active_held_item() + if(istype(I)) + if(check_access(I)) + if(!C.transferItemToLoc(I, src)) + return + auth = I + create_log("has logged in.", user) + else + create_log("has logged out.", user) + auth.forceMove(drop_location()) + C.put_in_hands(auth) + auth = null + + update_static_data_for_all_viewers() diff --git a/tgstation.dme b/tgstation.dme index 6c87df992798..de36b3e062cc 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7030,7 +7030,6 @@ #include "monkestation\code\modules\NTSL\code\global.dm" #include "monkestation\code\modules\NTSL\code\logging.dm" #include "monkestation\code\modules\NTSL\code\misc_procs.dm" -#include "monkestation\code\modules\NTSL\code\coding_language\client_verbs.dm" #include "monkestation\code\modules\NTSL\code\coding_language\errors.dm" #include "monkestation\code\modules\NTSL\code\coding_language\options.dm" #include "monkestation\code\modules\NTSL\code\coding_language\stack.dm" diff --git a/tgui/packages/tgui/interfaces/NTSLCoding.js b/tgui/packages/tgui/interfaces/NTSLCoding.js new file mode 100644 index 000000000000..e9cc874e3b72 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NTSLCoding.js @@ -0,0 +1,153 @@ +import { resolveAsset } from '../assets'; +import { useBackend, useLocalState } from '../backend'; +import { NoticeBox, Box, Input, LabeledList, Button, TextArea } from '../components'; +import { Window } from '../layouts'; + +export const NTSLCoding = (props, context) => { + const { act, data } = useBackend(context); + const { Authenticated } = data; + + return ( + + + + {Authenticated === 1 ? 'ACCESS GRANTED' : 'ACCESS DENIED'} + + {Authenticated === 1 ? : } + + + ); +}; + +const DeniedPanel = (props, context) => { + return ( + + PS: Starting session 2952 of user root.
+ PS: Starting jobs...
+ PS: Finished starting jobs.
+ PS: Waiting for jobs to finish...
+ PS: Jobs should have finished.
+ PS: Disposed job objects.
+ PS: Successfully saved 'boottime.xml'
+ PS: Asking for administrative permission...
+ PS: getting parameter 'Authentication'
+ WARN: Parameter 'Authentication' not detected.
+ @echo User credential login attempt detected, authentication required. + Please insert your ID card into the computer
+ PS: getting parameter 'Required Access'
+ @echo Required access needed: ACCESS_TCOMMS_ADMIN
+ PS: Process shutdown successfully.
+ Exit Code: 0
+
+ ); +}; + +const GrantedPanel = (props, context) => { + const { act, data } = useBackend(context); + const { + network, + detected_servers, + selected_server_name, + selected_server_autorun, + code, + errors, + warnings, + } = data; + + // We store code locally until the user manually uses the "save" button, since TextArea will save it every time you press ENTER + const [NTSLCode, setNTSLCode] = useLocalState(context, code, ''); + // This is made so we have a dynamically changing height of the box, just something to look nice + const code_lines = NTSLCode.split('\n').length * 1.5 + 1; + + return ( + + Currently connected network: + + act('Change Network', { + network: value, + }) + } + /> + {detected_servers.length > 0 && ( + + {detected_servers.map((detected_servers) => ( + + act('Select Server', { + server: detected_servers.name, + }) + } + /> + } + /> + ))} + + )} + {selected_server_name !== 0 && ( + + Currently Selected Server: + + {selected_server_name} +

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 iDmo6wKm9YV+Zw|CkGPLHwcGu{7?ceF diff --git a/monkestation/code/modules/NTSL/code/achievements.dm b/monkestation/code/modules/NTSL/code/achievements.dm index ac5a03ecf713..53a170cc188f 100644 --- a/monkestation/code/modules/NTSL/code/achievements.dm +++ b/monkestation/code/modules/NTSL/code/achievements.dm @@ -2,8 +2,10 @@ name = "Silence Bird!" desc = "As a signal technician create a script that mutes poly" database_id = MEDAL_BAD_BIRD + icon = "bird_silent" /datum/award/achievement/jobs/Poly_loud name = "Embrace The Bird!" desc = "As a signal technician create a script that makes poly LOUD" database_id = MEDAL_GOOD_BIRD + icon = "bird_loud" From cc2e555d13bd1bdb16ef2aa63b100bea2e4c61ce Mon Sep 17 00:00:00 2001 From: Gboster-0 <82319946+Gboster-0@users.noreply.github.com> Date: Sat, 8 Jun 2024 22:16:14 +0200 Subject: [PATCH 04/46] adds the programming console to maps and techweb --- _maps/map_files/BoxStation/BoxStation.dmm | 15 ++++++---- .../map_files/Deltastation/DeltaStation2.dmm | 18 ++++++++---- .../map_files/IceBoxStation/IceBoxStation.dmm | 15 ++++++---- _maps/map_files/KiloStation/KiloStation.dmm | 23 ++++++++++----- _maps/map_files/MetaStation/MetaStation.dmm | 29 ++++++++++--------- _maps/map_files/tramstation/tramstation.dmm | 8 +++-- code/modules/research/techweb/all_nodes.dm | 1 + monkestation/code/modules/NTSL/code/readme.md | 4 +++ 8 files changed, 71 insertions(+), 42 deletions(-) diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index b44d86d1194c..d9b5c3fe4e5e 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -1245,6 +1245,12 @@ "avI" = ( /obj/machinery/light/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/pen/blue{ + pixel_y = 5 + }, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "avL" = ( @@ -69960,17 +69966,14 @@ /turf/open/floor/iron/white, /area/station/science/research) "xxB" = ( -/obj/structure/table, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, -/obj/item/paper_bin, -/obj/item/pen/blue{ - pixel_y = 5 - }, -/obj/item/pen, /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 }, +/obj/machinery/computer/telecomms/traffic{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "xxI" = ( diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index b8f907ec0910..8658c4dcf114 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -11571,10 +11571,8 @@ /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) "cGR" = ( -/obj/structure/table/wood, -/obj/item/folder/blue, -/obj/item/pen, /obj/item/radio/intercom/directional/north, +/obj/machinery/computer/telecomms/traffic, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) "cHb" = ( @@ -14074,6 +14072,7 @@ /area/station/medical/chemistry) "dol" = ( /obj/structure/cable, +/obj/item/kirbyplants/random, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) "dor" = ( @@ -31604,9 +31603,9 @@ /turf/open/floor/glass/reinforced, /area/station/maintenance/department/science/xenobiology) "hzA" = ( -/obj/item/kirbyplants/random, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, +/obj/structure/table/wood, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) "hzC" = ( @@ -54008,6 +54007,7 @@ network = list("ss13","tcomms") }, /obj/machinery/light_switch/directional/north, +/obj/item/kirbyplants/random, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) "mOp" = ( @@ -55310,7 +55310,6 @@ "ngD" = ( /obj/structure/table/wood, /obj/machinery/light/directional/north, -/obj/item/paper_bin, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) @@ -60679,6 +60678,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/grimy, /area/station/service/lawoffice) +"oAf" = ( +/obj/structure/table/wood, +/obj/item/folder/blue, +/obj/item/pen, +/turf/open/floor/iron/grimy, +/area/station/tcommsat/computer) "oAn" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/computer/security/telescreen/entertainment/directional/north, @@ -71228,6 +71233,7 @@ /area/station/commons/lounge) "rbB" = ( /obj/structure/table/wood, +/obj/item/paper_bin, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) "rbC" = ( @@ -139792,7 +139798,7 @@ nza giF nae eVl -xDU +oAf gnA jHb kgs diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index d37bab27680e..aec075ad4547 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -22330,6 +22330,12 @@ "hfI" = ( /obj/machinery/light/directional/north, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen/blue{ + pixel_y = 5 + }, +/obj/item/pen, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "hfL" = ( @@ -31625,17 +31631,14 @@ /turf/open/floor/carpet, /area/station/command/meeting_room) "kiR" = ( -/obj/structure/table, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, -/obj/item/paper_bin, -/obj/item/pen/blue{ - pixel_y = 5 - }, -/obj/item/pen, /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 }, +/obj/machinery/computer/telecomms/traffic{ + dir = 4 + }, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "kjw" = ( diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 15b94c9fc7a0..2cc1dd22d8ed 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -3886,6 +3886,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted, +/obj/item/kirbyplants{ + icon_state = "plant-05" + }, /turf/open/floor/iron/dark/corner, /area/station/hallway/primary/central/fore) "bpn" = ( @@ -13282,15 +13285,12 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/item/kirbyplants{ - icon_state = "plant-05" - }, /obj/effect/turf_decal/tile/red{ dir = 1 }, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/turf/open/floor/iron, +/turf/closed/wall/r_wall, /area/station/hallway/primary/central/fore) "epN" = ( /obj/effect/spawner/structure/window/reinforced, @@ -16433,6 +16433,10 @@ /obj/item/food/grown/poppy/geranium, /turf/open/floor/iron/dark, /area/station/service/chapel) +"foD" = ( +/obj/machinery/status_display/ai/directional/south, +/turf/closed/wall/r_wall, +/area/station/tcommsat/computer) "foQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -29699,6 +29703,12 @@ "jnp" = ( /turf/closed/wall/rust, /area/station/cargo/drone_bay) +"jnu" = ( +/obj/machinery/computer/telecomms/traffic{ + dir = 1 + }, +/turf/open/floor/engine, +/area/station/tcommsat/computer) "jnQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -37994,7 +38004,6 @@ }, /obj/machinery/light/small/directional/east, /obj/item/radio/intercom/directional/east, -/obj/machinery/status_display/ai/directional/south, /turf/open/floor/engine, /area/station/tcommsat/computer) "mfY" = ( @@ -107212,7 +107221,7 @@ shk orT aQB mfU -vqw +jnu vqw imo tEE @@ -107469,7 +107478,7 @@ qZx hPW vqw vqw -vqw +foD epA xxP wqE diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index c2b3bfe718e4..104da03c2fb5 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -3570,12 +3570,6 @@ "blu" = ( /obj/structure/table/wood, /obj/machinery/light/small/directional/west, -/obj/item/radio/off{ - pixel_y = 4 - }, -/obj/item/screwdriver{ - pixel_y = 10 - }, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) "blw" = ( @@ -20100,12 +20094,6 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/iron, /area/station/service/hydroponics) -"hxB" = ( -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, -/turf/open/floor/iron/grimy, -/area/station/tcommsat/computer) "hxD" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/blue{ @@ -32558,6 +32546,9 @@ /obj/structure/showcase/cyborg/old{ pixel_y = 20 }, +/obj/item/kirbyplants{ + icon_state = "plant-21" + }, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) "lJm" = ( @@ -33310,6 +33301,12 @@ "lVq" = ( /obj/machinery/light/small/directional/south, /obj/structure/table/wood, +/obj/item/radio/off{ + pixel_y = 4 + }, +/obj/item/screwdriver{ + pixel_y = 10 + }, /turf/open/floor/iron/grimy, /area/station/tcommsat/computer) "lVB" = ( @@ -43342,6 +43339,10 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/dark, /area/station/service/chapel/office) +"pvq" = ( +/obj/machinery/computer/telecomms/traffic, +/turf/open/floor/iron/grimy, +/area/station/tcommsat/computer) "pvL" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -122949,7 +122950,7 @@ pQv tSP dHe giA -xCS +pvq nCu jGo lVq @@ -123209,7 +123210,7 @@ giA lJj pKv dfC -hxB +xCS hJJ hJJ hJJ diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 41094ea9c1b1..16ce799cc9c0 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -12267,6 +12267,7 @@ dir = 5 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/filingcabinet/chestdrawer, /turf/open/floor/iron, /area/station/tcommsat/computer) "cNy" = ( @@ -40286,7 +40287,6 @@ /turf/open/floor/glass/reinforced, /area/station/security/brig) "lSp" = ( -/obj/structure/filingcabinet/chestdrawer, /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 10 }, @@ -48913,11 +48913,11 @@ /turf/open/floor/wood/large, /area/station/service/library) "oHC" = ( -/obj/structure/table, /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 }, /obj/item/radio/intercom/directional/west, +/obj/machinery/announcement_system, /turf/open/floor/iron, /area/station/tcommsat/computer) "oHM" = ( @@ -73215,10 +73215,12 @@ /turf/open/floor/iron/smooth, /area/station/maintenance/tram/right) "wnq" = ( -/obj/machinery/announcement_system, /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 }, +/obj/machinery/computer/telecomms/traffic{ + dir = 1 + }, /turf/open/floor/iron/dark, /area/station/tcommsat/computer) "wns" = ( diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index b4a3ddfe36db..1f39d2de484d 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -1241,6 +1241,7 @@ "s_server", "s_transmitter", "s_treatment", + "s_traffic", // MONKESTATION ADDITION -- NTSL -- The board to actually program in NTSL ) /datum/techweb_node/integrated_hud diff --git a/monkestation/code/modules/NTSL/code/readme.md b/monkestation/code/modules/NTSL/code/readme.md index 60c7c4b3cfda..de73abea26f6 100644 --- a/monkestation/code/modules/NTSL/code/readme.md +++ b/monkestation/code/modules/NTSL/code/readme.md @@ -16,8 +16,12 @@ for example, adding in their job after their name - code\datums\chatmessage.dm -- Added a if(!speaker); return; due to NTSL code apparently not passing a speaker, i think, maybe, idk - code\game\machinery\telecomms\telecomunications.dm -- Added some logging if there's a wrong filter path - code\game\machinery\telecomms\machines\server.dm -- Added stuff to make the servers actually compile NTSL +- code\modules\research\techweb\all_nodes.dm -- Added the programming console thingy to the telecomms techweb + - interface\skin.dmf -- Added stuff to make NTSL code editing UI work... im sorry... i really need to turn it to TGUI +- icons\ui_icons\achievements.dmi -- Added the achievement icon for loud and silent birb + ### Defines: - code\__DEFINES\~monkestation\NTSL.dm From 8cf6b1f5af1d760f66b15fa907466a911574774e Mon Sep 17 00:00:00 2001 From: Gboster-0 <82319946+Gboster-0@users.noreply.github.com> Date: Sat, 8 Jun 2024 22:31:12 +0200 Subject: [PATCH 05/46] fixes the decals being in my walls on kilo --- _maps/map_files/KiloStation/KiloStation.dmm | 25 +++++---------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 2cc1dd22d8ed..e609f2c2282e 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -13278,20 +13278,6 @@ }, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) -"epA" = ( -/obj/effect/turf_decal/tile/yellow/half/contrasted{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/turf/closed/wall/r_wall, -/area/station/hallway/primary/central/fore) "epN" = ( /obj/effect/spawner/structure/window/reinforced, /turf/closed/wall, @@ -16433,10 +16419,6 @@ /obj/item/food/grown/poppy/geranium, /turf/open/floor/iron/dark, /area/station/service/chapel) -"foD" = ( -/obj/machinery/status_display/ai/directional/south, -/turf/closed/wall/r_wall, -/area/station/tcommsat/computer) "foQ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18968,6 +18950,8 @@ /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ dir = 1 }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron/dark/corner{ dir = 1 }, @@ -73768,6 +73752,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/status_display/ai/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "xye" = ( @@ -107478,8 +107463,8 @@ qZx hPW vqw vqw -foD -epA +vqw +vqw xxP wqE wuh From 6141a28391fb1032d9ac7b758cec9ca98a98b0bb Mon Sep 17 00:00:00 2001 From: Gboster-0 <82319946+Gboster-0@users.noreply.github.com> Date: Tue, 11 Jun 2024 06:37:07 +0200 Subject: [PATCH 06/46] Adds basic signal techs --- code/__DEFINES/access.dm | 5 + code/__DEFINES/jobs.dm | 1 + code/__DEFINES/logging.dm | 2 +- code/__DEFINES/~monkestation/access.dm | 3 + code/__DEFINES/~monkestation/jobs.dm | 2 + code/datums/chatmessage.dm | 2 +- code/datums/id_trim/jobs.dm | 1 + code/game/say.dm | 3 +- icons/obj/card.dmi | Bin 17644 -> 17673 bytes .../implementations/telecomms_translator.dm | 3 - .../NTSL/code/machinery/traffic_control.dm | 2 +- monkestation/code/modules/NTSL/code/readme.md | 22 +++- .../clothing/under/jobs/engineering.dm | 8 ++ .../jobs/job_types/signal_technician.dm | 102 ++++++++++++++++++ .../computers/item/role_tablet_presets.dm | 5 + monkestation/icons/mob/clothing/uniform.dmi | Bin 49343 -> 51129 bytes monkestation/icons/obj/clothing/uniforms.dmi | Bin 16580 -> 17169 bytes tgstation.dme | 2 + 18 files changed, 153 insertions(+), 10 deletions(-) create mode 100644 monkestation/code/modules/clothing/under/jobs/engineering.dm create mode 100644 monkestation/code/modules/jobs/job_types/signal_technician.dm create mode 100644 monkestation/code/modules/modular_computers/computers/item/role_tablet_presets.dm diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index f9105932154a..bdacd51dc56d 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -344,10 +344,12 @@ ACCESS_MINISAT, \ ACCESS_RC_ANNOUNCE, \ ACCESS_TCOMMS, \ + ACCESS_TCOMMS_ADMIN, \ ACCESS_TECH_STORAGE, \ ACCESS_TELEPORTER, \ ACCESS_VAULT, \ ) +// MONKESTATION ADDITION -- NTSL -- added: ACCESS_TCOMMS_ADMIN up there /// Private head of staff offices, usually only granted to most cards by trimming. Do not use direct, access via SSid_access.get_flag_access_list(ACCESS_FLAG_PRV_COMMAND) #define PRIVATE_COMMAND_ACCESS list( \ @@ -485,8 +487,11 @@ ACCESS_MECH_ENGINE, \ ACCESS_MINISAT, \ ACCESS_TCOMMS, \ + ACCESS_TCOMMS_ADMIN, \ ACCESS_TECH_STORAGE, \ ) +// MONKESTATION ADDITION -- NTSL -- added: ACCESS_TCOMMS_ADMIN up there + /// Name for the Supply region. #define REGION_SUPPLY "Supply" /// Used to seed the accesses_by_region list in SSid_access. A list of all cargo regional accesses that are overseen by the HoP. diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 8ab7647d47e8..03fb7c567282 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -133,6 +133,7 @@ #define JOB_DISPLAY_ORDER_AI 14 #define JOB_DISPLAY_ORDER_CYBORG 15 #define JOB_DISPLAY_ORDER_CHIEF_ENGINEER 16 +#define JOB_DISPLAY_ORDER_SIGNAL_TECHNICIAN 16.5 // MONKESTATION ADDITION -- NTSL #define JOB_DISPLAY_ORDER_STATION_ENGINEER 17 #define JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN 18 #define JOB_DISPLAY_ORDER_QUARTERMASTER 19 diff --git a/code/__DEFINES/logging.dm b/code/__DEFINES/logging.dm index 49f1fc00a3dd..86fe4f5a4f51 100644 --- a/code/__DEFINES/logging.dm +++ b/code/__DEFINES/logging.dm @@ -61,7 +61,7 @@ #define INDIVIDUAL_COMMS_LOG (LOG_PDA | LOG_CHAT | LOG_COMMENT | LOG_TELECOMMS) #define INDIVIDUAL_OOC_LOG (LOG_OOC | LOG_ADMIN) #define INDIVIDUAL_OWNERSHIP_LOG (LOG_OWNERSHIP) -#define INDIVIDUAL_SHOW_ALL_LOG (LOG_ATTACK | LOG_SAY | LOG_WHISPER | LOG_EMOTE | LOG_RADIO_EMOTE | LOG_DSAY | LOG_PDA | LOG_CHAT | LOG_COMMENT | LOG_TELECOMMS | LOG_OOC | LOG_ADMIN | LOG_OWNERSHIP | LOG_GAME | LOG_ADMIN_PRIVATE | LOG_ASAY | LOG_MECHA | LOG_VIRUS | LOG_SHUTTLE | LOG_ECON | LOG_VICTIM | LOG_SPEECH_INDICATORS | LOG_CLONING) +#define INDIVIDUAL_SHOW_ALL_LOG (LOG_ATTACK | LOG_SAY | LOG_WHISPER | LOG_EMOTE | LOG_RADIO_EMOTE | LOG_DSAY | LOG_PDA | LOG_CHAT | LOG_COMMENT | LOG_TELECOMMS | LOG_OOC | LOG_ADMIN | LOG_OWNERSHIP | LOG_GAME | LOG_ADMIN_PRIVATE | LOG_ASAY | LOG_MECHA | LOG_VIRUS | LOG_SHUTTLE | LOG_ECON | LOG_VICTIM | LOG_SPEECH_INDICATORS | LOG_CLONING | LOG_NTSL) #define LOGSRC_CKEY "Ckey" #define LOGSRC_MOB "Mob" diff --git a/code/__DEFINES/~monkestation/access.dm b/code/__DEFINES/~monkestation/access.dm index 49f1c04f9401..76a2e79a3c23 100644 --- a/code/__DEFINES/~monkestation/access.dm +++ b/code/__DEFINES/~monkestation/access.dm @@ -4,3 +4,6 @@ /// Access to permabrig. [ACCESS_BRIG] also grants permabrig access, this is just for ONLY permabrig accesss, for security assistants. #define ACCESS_PERMABRIG "permabrig" + +/// Access to the NTSL console. It's important because only the signal technician and CE should have it. +#define ACCESS_TCOMMS_ADMIN "tcomms_admin" diff --git a/code/__DEFINES/~monkestation/jobs.dm b/code/__DEFINES/~monkestation/jobs.dm index 2a2c5ae5e3a4..98790c5c78c0 100644 --- a/code/__DEFINES/~monkestation/jobs.dm +++ b/code/__DEFINES/~monkestation/jobs.dm @@ -1 +1,3 @@ #define JOB_SECURITY_ASSISTANT "Security Assistant" + +#define JOB_SIGNAL_TECHNICIAN "Signal Technician" diff --git a/code/datums/chatmessage.dm b/code/datums/chatmessage.dm index e77cce686506..227f77717611 100644 --- a/code/datums/chatmessage.dm +++ b/code/datums/chatmessage.dm @@ -307,7 +307,7 @@ // Ensure the list we are using, if present, is a copy so we don't modify the list provided to us spans = spans ? spans.Copy() : list() - // MONKESTATION ADDITION START -- NTSL -- doesn't pass a speaker when you do broadcast() since technically nothing is actually speaking. + // MONKESTATION ADDITION START -- NTSL -- NTSL doesn't pass a speaker when you do broadcast() since technically nothing is actually speaking. if(!speaker) return // MONKESTATION ADDITION END diff --git a/code/datums/id_trim/jobs.dm b/code/datums/id_trim/jobs.dm index 358a0c5540e6..77c61c01dc8d 100644 --- a/code/datums/id_trim/jobs.dm +++ b/code/datums/id_trim/jobs.dm @@ -324,6 +324,7 @@ ACCESS_MINISAT, ACCESS_RC_ANNOUNCE, ACCESS_TCOMMS, + ACCESS_TCOMMS_ADMIN, // MONKESTATION ADDITION -- NTSL ACCESS_TECH_STORAGE, ) minimal_wildcard_access = list( diff --git a/code/game/say.dm b/code/game/say.dm index 5f25b82417ff..a207261434f6 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -106,7 +106,8 @@ GLOBAL_LIST_INIT(freqtospan, list( var/mob/living/carbon/human/human_speaker = speaker namepart = "[human_speaker.get_visible_name()]" //End name span. - var/endspanpart = "" +// var/endspanpart = "" // MONKESTATION EDIT OLD -- NTSL + var/endspanpart = "" // MONKESTATION EDIT NEW //Message var/messagepart diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index be13305ca8d47ef294919e14eae26f89acd48973..a4805a60c0bf274a05480b22bac8b4d1513c670c 100644 GIT binary patch literal 17673 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 LrCh0K^ZNe+LzkxF literal 17644 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 to the end of endspanpart - code\game\machinery\telecomms\telecomunications.dm -- Added some logging if there's a wrong filter path - code\game\machinery\telecomms\machines\server.dm -- Added stuff to make the servers actually compile NTSL - code\modules\research\techweb\all_nodes.dm -- Added the programming console thingy to the telecomms techweb @@ -21,9 +21,25 @@ for example, adding in their job after their name - interface\skin.dmf -- Added stuff to make NTSL code editing UI work... im sorry... i really need to turn it to TGUI - icons\ui_icons\achievements.dmi -- Added the achievement icon for loud and silent birb +- icons\obj\card.dmi -- Added the icon for signal techs + +### Included files that are not contained in this module: + +- monkestation\code\modules\jobs\job_types\signal_technician.dm +- monkestation\code\modules\clothing\under\jobs\engineering.dm + +- monkestation\icons\obj\clothing\uniforms.dmi +- monkestation\icons\mob\clothing\uniform.dmi ### Defines: +- code\__DEFINES\access.dm +- code\__DEFINES\jobs.dm +- code\__DEFINES\achievements.dm -- Added poly achievement defines, since apparently we dont modularize dat +- code\__DEFINES\logging.dm -- Added NTSL log stuff + +- code\__DEFINES\~monkestation\access.dm +- code\__DEFINES\~monkestation\jobs.dm - code\__DEFINES\~monkestation\NTSL.dm ### Credits: diff --git a/monkestation/code/modules/clothing/under/jobs/engineering.dm b/monkestation/code/modules/clothing/under/jobs/engineering.dm new file mode 100644 index 000000000000..3af494ffc4fb --- /dev/null +++ b/monkestation/code/modules/clothing/under/jobs/engineering.dm @@ -0,0 +1,8 @@ +/obj/item/clothing/under/rank/engineering/signal_tech + name = "engineer's jumpsuit" + desc = "It's an orange high visibility jumpsuit worn by engineers. Made from fire resistant materials." + icon = 'monkestation/icons/obj/clothing/uniforms.dmi' + worn_icon = 'monkestation/icons/mob/clothing/uniform.dmi' + icon_state = "signal_tech" + inhand_icon_state = "engi_suit" + species_exception = list(/datum/species/golem/uranium) diff --git a/monkestation/code/modules/jobs/job_types/signal_technician.dm b/monkestation/code/modules/jobs/job_types/signal_technician.dm new file mode 100644 index 000000000000..ae0974971ce4 --- /dev/null +++ b/monkestation/code/modules/jobs/job_types/signal_technician.dm @@ -0,0 +1,102 @@ +/datum/job/signal_technician + title = JOB_SIGNAL_TECHNICIAN + description = "An agent of order. Make sure Tcomms runs and code in your offtime." + department_head = list(JOB_CHIEF_ENGINEER) + faction = FACTION_STATION + total_positions = 1 + spawn_positions = 1 + supervisors = SUPERVISOR_CE + minimal_player_age = 7 + exp_requirements = 600 // Same as the CE hours, 10. This is because telecomms are unironically harder than most head roles and very important. + exp_required_type = EXP_TYPE_CREW + exp_required_type_department = EXP_TYPE_ENGINEERING + exp_granted_type = EXP_TYPE_CREW + config_tag = "SIGNAL_TECH" + + outfit = /datum/outfit/job/signal_tech +// plasmaman_outfit = /datum/outfit/plasmaman/signal_tech TODO + + paycheck = PAYCHECK_CREW + paycheck_department = ACCOUNT_ENG + + liver_traits = list(TRAIT_ENGINEER_METABOLISM) + + display_order = JOB_DISPLAY_ORDER_SIGNAL_TECHNICIAN + + bounty_types = CIV_JOB_ENG + + departments_list = list( + /datum/job_department/engineering, + ) + + family_heirlooms = list(/obj/item/clothing/head/utility/hardhat, /obj/item/screwdriver, /obj/item/wrench, /obj/item/weldingtool, /obj/item/crowbar, /obj/item/wirecutters) + + mail_goodies = list( + /obj/item/storage/box/lights/mixed = 20, + /obj/item/lightreplacer = 10, + /obj/item/holosign_creator/engineering = 8, + /obj/item/wrench/bolter = 8, + /obj/item/clothing/head/utility/hardhat/red/upgraded = 1 + ) + rpg_title = "Telecommunications goblin" + job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN + + alt_titles = list( + "Signal Technician", + "Network Admin", + "Telecomunications Engineer", + ) + +/datum/outfit/job/signal_tech + name = "Signal Technician" + jobtype = /datum/job/signal_technician + + id_trim = /datum/id_trim/job/signal_technician + + uniform = /obj/item/clothing/under/rank/engineering/signal_tech + belt = /obj/item/storage/belt/utility/full/engi + ears = /obj/item/radio/headset/headset_eng + gloves = /obj/item/clothing/gloves/color/black + shoes = /obj/item/clothing/shoes/workboots + + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel/eng + duffelbag = /obj/item/storage/backpack/duffelbag/engineering + + box = /obj/item/storage/box/survival/engineer + pda_slot = ITEM_SLOT_LPOCKET + l_pocket = /obj/item/modular_computer/pda/signal + + skillchips = list(/obj/item/skillchip/job/engineer) + + +/datum/id_trim/job/signal_technician + assignment = "Signal Technician" + intern_alt_name = "Junior Signal Technician" + trim_state = "trim_signaltech" + department_color = COLOR_ENGINEERING_ORANGE + subdepartment_color = COLOR_ENGINEERING_ORANGE + sechud_icon_state = SECHUD_STATION_ENGINEER + minimal_access = list( + ACCESS_AUX_BASE, + ACCESS_CONSTRUCTION, + ACCESS_ENGINEERING, + ACCESS_ENGINE_EQUIP, + ACCESS_EXTERNAL_AIRLOCKS, + ACCESS_MAINT_TUNNELS, + ACCESS_MECH_ENGINE, + ACCESS_MINERAL_STOREROOM, + ACCESS_MINISAT, + ACCESS_TCOMMS, + ACCESS_TCOMMS_ADMIN, + ACCESS_TECH_STORAGE, + ) + extra_access = list( + ACCESS_ATMOSPHERICS, + ) + template_access = list( + ACCESS_CAPTAIN, + ACCESS_CHANGE_IDS, + ACCESS_CE, + ) + job = /datum/job/signal_technician diff --git a/monkestation/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/monkestation/code/modules/modular_computers/computers/item/role_tablet_presets.dm new file mode 100644 index 000000000000..24e01e0bc58f --- /dev/null +++ b/monkestation/code/modules/modular_computers/computers/item/role_tablet_presets.dm @@ -0,0 +1,5 @@ +/obj/item/modular_computer/pda/signal + name = "signal PDA" + greyscale_config = /datum/greyscale_config/tablet/stripe_thick + greyscale_colors = "#D99A2E#0EC220#727272" + starting_programs = list() diff --git a/monkestation/icons/mob/clothing/uniform.dmi b/monkestation/icons/mob/clothing/uniform.dmi index a4fed470b1194e4f024f6ad950b757cf7fd84520..3a29beee11faa5cf255526de20e403ce652235f8 100644 GIT binary patch delta 8837 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 Q1E80-hMszbs@1#y0W9f082|tP delta 7252 zcmb7}c|4Tw_y2EWEg{L0Jqjt2LW?a~3Xy%yk}Z4Q)@=8XHKM76tYgWRY-w!SLzG?i zeamhzW;D!vFQ51C_kH~S`2F*_|GAgBm+PGCT<7&XXR6~V8$u{w3nD1UsEcxl4>TxS za|xJo*p*FK9`$HmLPKfiuG6_oOV?F5qjgSB{?KmA>mM(z4aQ4T^dRJd*+68|hkC92eK#(~VK46JZt72>DC| zuR?`SRuuxC40@(#6fCn{a$oVQ-?e|T=%+?HB)zhvGB>2>rOx%2UJrR9dujVDX7u9g zK`!u8mn3B}WWLvnBlJ~cZfUUE6u*8k8e@BHKz ze6^Jp$rmU{lI6;lCkr#z@SJvTO|U$X#vu*auRNWnuP|M8SU4S6ckV!SH;$os+*)%f zAc)ZZQLU|2rv6+5^TXTk`6Njb5AM}W!!`5mUGwGcM=QBR?umzQoFG5a!DY=QD(q}S zgwW((uswWeF~N5v5ao=I+$0C>S)86KE6Hh>^~_`%CXrz@zCyba{Z)@VXYcOQhrzcDeV>A(jo8N ztqU%b!4R^z_C(WHX{v9dr9Pdm)GNLO;OM>f-|!^Wnt?|D9VQ_;1pj+miWNuHH~B-G zfwzQkQBj-h)(;!*gN8ZSxg49zgPKQ&(IVFw7-*i={owMRnB0u4olGK>)iX;>c?kUX zo1~)d^c-wxQfXP~Ei*flJar5E?WYtM&+2yJNp9CbYptBfO)XrlQIR@Hz}&QkzOrY% z?{no?4GpeI+~UQwOh`~kF#iVUS?p2$iP+Bt{c&b@xX#CQ#fnRi^@M7;cFA?hEIQ!r zV$+5Z!kk*!!FVT}@xy|XVOmOAB?(uU*T9J>+z?RtSGmRUo%`i`c0<7}{ff!CUq9b9 z*kMO^q%$}>Wcx7u{wu6M3)QZu#C4+^OvAOw!J; zrFeLeh51KqToUz5JsaOSF+s$>*LyOX*>gFAxy4pU@qUT$@Q9EExT z4D1Tcoivl0JYjB#vNDC0wpPloF+y)eekqnItNNO_uGGRx#J zHHZo|s=PK2ELdIJ(B5CP|1~@wZzGjk_!Rr)1|}=dUD4mXQ&V7P^G_ zqQkJ=