Skip to content
This repository was archived by the owner on May 22, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 52 additions & 1 deletion tgui/packages/tgui/interfaces/NtslEditor.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,57 @@ import { useBackend, useLocalState } from '../backend';
import { Box, Button, Divider, Input, Tabs, TextArea, Section, Stack } from '../components';
import { Window } from '../layouts';

// NTSLTextArea component start
// This is literally just TextArea but without ENTER updating anything, for NTSL
import { toInputValue } from '../components/Input';
import { KEY_ESCAPE, KEY_TAB } from 'common/keycodes';

class NTSLTextArea extends TextArea {
constructor(props) {
super(props);
const { dontUseTabForIndent = false } = props;
this.handleKeyDown = (e) => {
const { editing } = this.state;
const { onChange, onInput, onEnter, onKey } = this.props;
if (e.keyCode === KEY_ESCAPE) {
if (this.props.onEscape) {
this.props.onEscape(e);
}
this.setEditing(false);
if (this.props.selfClear) {
e.target.value = '';
} else {
e.target.value = toInputValue(this.props.value);
e.target.blur();
}
return;
}
if (!editing) {
this.setEditing(true);
}
// Custom key handler
if (onKey) {
onKey(e, e.target.value);
}
if (!dontUseTabForIndent) {
const keyCode = e.keyCode || e.which;
if (keyCode === KEY_TAB) {
e.preventDefault();
const { value, selectionStart, selectionEnd } = e.target;
e.target.value =
value.substring(0, selectionStart) +
'\t' +
value.substring(selectionEnd);
e.target.selectionEnd = selectionStart + 1;
if (onInput) {
onInput(e, e.target.value);
}
}
}
};
}
}
// NTSLTextArea component end

export const NtslEditor = (props, context) => {
// Make sure we don't start larger than 50%/80% of screen width/height.
Expand Down Expand Up @@ -34,7 +85,7 @@ const ScriptEditor = (props, context) => {
return (
<Box width="100%" height="100%">
{user_name ?
<TextArea
<NTSLTextArea
noborder
scrollbar
value={stored_code}
Expand Down
90 changes: 45 additions & 45 deletions yogstation/code/modules/scripting/Implementations/logic.dm
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@
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
var/haystack = length(params) >= 1 ? params[1] : null
var/needle = length(params) >= 2 ? params[2] : null
var/start = length(params) >= 3 ? params[3] : 1
var/end = length(params) >= 4 ? params[4] : 0
if(!haystack || !needle)
return
if(IS_OBJECT(haystack))
Expand All @@ -50,9 +50,9 @@
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
var/string = length(params) >= 1 ? params[1] : null
var/start = length(params) >= 2 ? params[2] : 1
var/end = length(params) >= 3 ? params[3] : 0
if(istext(string) && isnum(start) && isnum(end))
if(start > 0)
return copytext(string, start, end)
Expand All @@ -62,7 +62,7 @@
name = "length"

/datum/n_function/default/length/execute(this_obj, list/params)
var/container = params.len >= 1 ? params[1] : null
var/container = length(params) >= 1 ? params[1] : null
if(container)
if(istype(container, /list) || istext(container))
return length(container)
Expand All @@ -73,7 +73,7 @@
name = "lower"

/datum/n_function/default/lower/execute(this_obj, list/params)
var/string = params.len >= 1 ? params[1] : null
var/string = length(params) >= 1 ? params[1] : null
if(istext(string))
return lowertext(string)

Expand All @@ -82,7 +82,7 @@
name = "upper"

/datum/n_function/default/upper/execute(this_obj, list/params)
var/string = params.len >= 1 ? params[1] : null
var/string = length(params) >= 1 ? params[1] : null
if(istext(string))
return uppertext(string)

Expand All @@ -91,8 +91,8 @@
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] : ""
var/string = length(params) >= 1 ? params[1] : null
var/separator = length(params) >= 2 ? params[2] : ""
if(istext(string) && (istext(separator) || isnull(separator)))
return splittext(string, separator)

Expand All @@ -111,8 +111,8 @@
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
var/string = length(params) >= 1 ? params[1] : null
var/amount = length(params) >= 2 ? params[2] : null
if(istext(string) && isnum(amount))
var/i
var/newstring = ""
Expand All @@ -130,7 +130,7 @@
name = "reverse"

/datum/n_function/default/reverse/execute(this_obj, list/params)
var/string = params.len >= 1 ? params[1] : null
var/string = length(params) >= 1 ? params[1] : null
if(istext(string))
var/newstring = ""
var/i
Expand All @@ -146,15 +146,15 @@
name = "tonum"

/datum/n_function/default/tonum/execute(this_obj, list/params)
var/string = params.len >= 1 ? params[1] : null
var/string = length(params) >= 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
var/string = length(params) >= 1 ? params[1] : null
if(!istext(string))
return ""

Expand All @@ -170,7 +170,7 @@
name = "max"

/datum/n_function/default/max/execute(this_obj, list/params)
if(!params.len)
if(!length(params))
return FALSE

var/max = params[1]
Expand All @@ -185,7 +185,7 @@
name = "min"

/datum/n_function/default/min/execute(this_obj, list/params)
if(!params.len)
if(!length(params))
return FALSE

var/min = params[1]
Expand All @@ -199,22 +199,22 @@
name = "prob"

/datum/n_function/default/prob/execute(this_obj, list/params)
var/chance = params.len >= 1 ? params[1] : null
var/chance = length(params) >= 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
//var/seed = length(params) >= 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
var/low = length(params) >= 1 ? params[1] : null
var/high = length(params) >= 2 ? params[2] : null
if(isnull(low) && isnull(high))
return rand()

Expand All @@ -225,7 +225,7 @@
name = "tostring"

/datum/n_function/default/tostring/execute(this_obj, list/params)
var/num = params.len >= 1 ? params[1] : null
var/num = length(params) >= 1 ? params[1] : null
if(isnum(num))
return num2text(num)

Expand All @@ -234,7 +234,7 @@
name = "sqrt"

/datum/n_function/default/sqrt/execute(this_obj, list/params)
var/num = params.len >= 1 ? params[1] : null
var/num = length(params) >= 1 ? params[1] : null
if(isnum(num))
return sqrt(num)

Expand All @@ -243,7 +243,7 @@
name = "abs"

/datum/n_function/default/abs/execute(this_obj, list/params)
var/num = params.len >= 1 ? params[1] : null
var/num = length(params) >= 1 ? params[1] : null
if(isnum(num))
return abs(num)

Expand All @@ -252,7 +252,7 @@
name = "floor"

/datum/n_function/default/floor/execute(this_obj, list/params)
var/num = params.len >= 1 ? params[1] : null
var/num = length(params) >= 1 ? params[1] : null
if(isnum(num))
return round(num)

Expand All @@ -261,7 +261,7 @@
name = "ceil"

/datum/n_function/default/ceil/execute(this_obj, list/params)
var/num = params.len >= 1 ? params[1] : null
var/num = length(params) >= 1 ? params[1] : null
if(isnum(num))
return round(num)+1

Expand All @@ -270,7 +270,7 @@
name = "round"

/datum/n_function/default/round/execute(this_obj, list/params)
var/num = params.len >= 1 ? params[1] : null
var/num = length(params) >= 1 ? params[1] : null
if(isnum(num))
if(num-round(num) < 0.5)
return round(num)
Expand All @@ -281,9 +281,9 @@
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
var/num = length(params) >= 1 ? params[1] : null
var/min = length(params) >= 2 ? params[2] : -1
var/max = length(params) >= 3 ? params[3] : 1
if(isnum(num) && isnum(min) && isnum(max))
if(num <= min)
return min
Expand All @@ -296,9 +296,9 @@
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
var/num = length(params) >= 1 ? params[1] : null
var/min = length(params) >= 2 ? params[2] : -1
var/max = length(params) >= 3 ? params[3] : 1
if(isnum(num)&&isnum(min)&&isnum(max))
return ((min <= num) && (num <= max))

Expand All @@ -307,7 +307,7 @@
name = "sin"

/datum/n_function/default/sin/execute(this_obj, list/params)
var/num = params.len >= 1 ? params[1] : null
var/num = length(params) >= 1 ? params[1] : null
if(isnum(num))
return sin(num)

Expand All @@ -316,7 +316,7 @@
name = "cos"

/datum/n_function/default/cos/execute(this_obj, list/params)
var/num = params.len >= 1 ? params[1] : null
var/num = length(params) >= 1 ? params[1] : null
if(isnum(num))
return cos(num)

Expand All @@ -325,7 +325,7 @@
name = "asin"

/datum/n_function/default/asin/execute(this_obj, list/params)
var/num = params.len >= 1 ? params[1] : null
var/num = length(params) >= 1 ? params[1] : null
if(isnum(num) && -1 <= num && num <= 1)
return arcsin(num)

Expand All @@ -334,7 +334,7 @@
name = "acos"

/datum/n_function/default/acos/execute(this_obj, list/params)
var/num = params.len >= 1 ? params[1] : null
var/num = length(params) >= 1 ? params[1] : null
if(isnum(num) && -1 <= num && num <= 1)
return arccos(num)

Expand All @@ -343,7 +343,7 @@
name = "log"

/datum/n_function/default/log/execute(this_obj, list/params)
var/num = params.len >= 1 ? params[1] : null
var/num = length(params) >= 1 ? params[1] : null
if(isnum(num) && 0 < num)
return log(num)

Expand All @@ -352,17 +352,17 @@
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
var/text = length(params) >= 1 ? params[1] : null
var/find = length(params) >= 2 ? params[2] : null
var/replacement = length(params) >= 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]))
if(length(params) >= 4 && isnum(params[4]))
max_count = min(params[4], SCRIPT_MAX_REPLACEMENTS_ALLOWED)
else
max_count = SCRIPT_MAX_REPLACEMENTS_ALLOWED
Expand Down Expand Up @@ -393,7 +393,7 @@
name = "sleep"

/datum/n_function/default/sleeps/execute(this_obj, list/params)
var/time = params.len >= 1 ? params[1] : null
var/time = length(params) >= 1 ? params[1] : null
sleep(time)

/datum/n_function/default/timestamp
Expand Down
Loading