diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 27c49bf080..65cbae5624 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -106,7 +106,9 @@ if(stat & (BROKEN|NOPOWER) || !on) return - var/obj/item/device/multitool/P = user.equipped() + var/obj/item/device/multitool/P = null + if(!issilicon(user)) + P = user.equipped() user.machine = src var/dat @@ -142,10 +144,12 @@ dat += "
\[Add Filter\]" dat += "
" - if(P.buffer) - dat += "

MULTITOOL BUFFER: [P.buffer] ([P.buffer.id]) \[Link\] \[Flush\]" - else - dat += "

MULTITOOL BUFFER:
\[Add Machine\]" + + if(P) + if(P.buffer) + dat += "

MULTITOOL BUFFER: [P.buffer] ([P.buffer.id]) \[Link\] \[Flush\]" + else + dat += "

MULTITOOL BUFFER:
\[Add Machine\]" dat += "" temp = "" @@ -164,7 +168,9 @@ if(stat & (BROKEN|NOPOWER) || !on) return - var/obj/item/device/multitool/P = usr.equipped() + var/obj/item/device/multitool/P = null + if(!issilicon(usr)) + P = usr.equipped() if(href_list["input"]) switch(href_list["input"]) @@ -220,17 +226,19 @@ if(href_list["link"]) - if(P.buffer) - if(!(src in P.buffer.links)) - P.buffer.links.Add(src) + if(P) - if(!(P.buffer in src.links)) - src.links.Add(P.buffer) + if(P.buffer) + if(!(src in P.buffer.links)) + P.buffer.links.Add(src) - temp = "-% Successfully linked with \ref[P.buffer] [P.buffer.name] %-" + if(!(P.buffer in src.links)) + src.links.Add(P.buffer) - else - temp = "-% Unable to acquire buffer %-" + temp = "-% Successfully linked with \ref[P.buffer] [P.buffer.name] %-" + + else + temp = "-% Unable to acquire buffer %-" if(href_list["buffer"]) diff --git a/code/game/topic.dm b/code/game/topic.dm index dbed2da6f6..db45c7d992 100644 --- a/code/game/topic.dm +++ b/code/game/topic.dm @@ -25,9 +25,21 @@ s["host"] = host ? host : null s["players"] = list() var/n = 0 + var/admins = 0 + for(var/mob/M in world) + if(M.client) + if(M.client.holder && M.client.authenticated) + if(!M.client.stealth) + admins++ + s["player[n]"] = M.client.key n++ s["players"] = n - return list2params(s) \ No newline at end of file + + // 7 + s["players"] + 1 = index of s["revinfo"] + s["revision"] = revdata.revision + s["admins"] = admins + + return list2params(s) diff --git a/code/modules/scripting/Implementations/Telecomms.dm b/code/modules/scripting/Implementations/Telecomms.dm index bc3f8e4bc7..a22905aea6 100644 --- a/code/modules/scripting/Implementations/Telecomms.dm +++ b/code/modules/scripting/Implementations/Telecomms.dm @@ -157,6 +157,25 @@ interpreter.SetProc("prob", /proc/prob_chance) interpreter.SetProc("substr", /proc/docopytext) + // Donkie~ + // Strings + interpreter.SetProc("lower", /proc/n_lower) + interpreter.SetProc("upper", /proc/n_upper) + interpreter.SetProc("explode", /proc/string_explode) + interpreter.SetProc("repeat", /proc/n_repeat) + interpreter.SetProc("reverse", /proc/n_reverse) + interpreter.SetProc("tonum", /proc/n_str2num) + + // Numbers + interpreter.SetProc("tostring", /proc/n_num2str) + interpreter.SetProc("sqrt", /proc/n_sqrt) + interpreter.SetProc("abs", /proc/n_abs) + interpreter.SetProc("floor", /proc/n_floor) + interpreter.SetProc("ceil", /proc/n_ceil) + interpreter.SetProc("round", /proc/n_round) + interpreter.SetProc("clamp", /proc/n_clamp) + interpreter.SetProc("inrange", /proc/n_inrange) + // End of Donkie~ // Run the compiled code @@ -165,7 +184,7 @@ // Backwards-apply variables onto signal data /* sanitize EVERYTHING. fucking players can't be trusted with SHIT */ - signal.data["message"] = trim(copytext(sanitize(interpreter.GetVar("$content")), 1, MAX_MESSAGE_LEN)) + signal.data["message"] = interpreter.GetVar("$content") signal.frequency = interpreter.GetVar("$freq") var/setname = "" @@ -173,7 +192,7 @@ if(interpreter.GetVar("$source") in S.stored_names) setname = interpreter.GetVar("$source") else - setname = "[trim(copytext(sanitize(interpreter.GetVar("$source")), 1, MAX_MESSAGE_LEN))]" + setname = "[interpreter.GetVar("$source")]" if(signal.data["name"] != setname) signal.data["realname"] = setname diff --git a/code/modules/scripting/Implementations/_Logic.dm b/code/modules/scripting/Implementations/_Logic.dm index af89de25a7..54ebe6a7fb 100644 --- a/code/modules/scripting/Implementations/_Logic.dm +++ b/code/modules/scripting/Implementations/_Logic.dm @@ -123,3 +123,114 @@ if(container) if(istype(container, /list) || istext(container)) return length(container) + +// BY DONKIE~ +// String stuff +/proc/n_lower(var/string) + if(istext(string)) + return lowertext(string) + +/proc/n_upper(var/string) + if(istext(string)) + return uppertext(string) + + +//Makes a list where all indicies in a string is a seperate index in the list +// JUST A HELPER DON'T ADD TO NTSCRIPT +proc/string_tolist(var/string) + var/list/L = new/list() + + var/i + for(i=1, i<=lentext(string), i++) + L.Add(copytext(string, i, i)) + + return L + +proc/string_explode(var/string, var/separator) + if(istext(string)) + if(istext(separator) && separator == "") + return string_tolist(string) + + var/i + var/lasti = 1 + var/list/L = new/list() + + for(i=1, i<=lentext(string)+1, i++) + if(copytext(string, i, i+1) == separator) // We found a separator + L.Add(copytext(string, lasti, i)) + lasti = i+1 + + L.Add(copytext(string, lasti, lentext(string)+1)) // Adds the last segment + + return L + +proc/n_repeat(var/string, var/amount) + if(istext(string) && isnum(amount)) + var/i + var/newstring = "" + for(i=0, i<=amount, i++) + newstring = newstring + string + + return newstring + +proc/n_reverse(var/string) + if(istext(string)) + var/newstring = "" + var/i + for(i=lentext(string), i>0, i--) + world << copytext(string, i, i+1) + newstring = newstring + copytext(string, i, i+1) + + return newstring + +// I don't know if it's neccesary to make my own proc, but I think I have to to be able to check for istext. +proc/n_str2num(var/string) + if(istext(string)) + return text2num(string) + +// Number shit +proc/n_num2str(var/num) + if(isnum(num)) + return num2text(num) + +// Squareroot +proc/n_sqrt(var/num) + if(isnum(num)) + return sqrt(num) + +// Magnitude of num +proc/n_abs(var/num) + if(isnum(num)) + return abs(num) + +// Round down +proc/n_floor(var/num) + if(isnum(num)) + return round(num) + +// Round up +proc/n_ceil(var/num) + if(isnum(num)) + return round(num)+1 + +// Round to nearest integer +proc/n_round(var/num) + if(isnum(num)) + if(num-round(num)<0.5) + return round(num) + return n_ceil(num) + +// Clamps N between min and max +proc/n_clamp(var/num, var/min=-1, var/max=1) + if(isnum(num)&&isnum(min)&&isnum(max)) + if(num<=min) + return min + if(num>=max) + return max + return num + +// Returns 1 if N is inbetween Min and Max +proc/n_inrange(var/num, var/min=-1, var/max=1) + if(isnum(num)&&isnum(min)&&isnum(max)) + return ((min <= num) && (num <= max)) +// END OF BY DONKIE :(