[READY] BYOND 516 compatability (#25105)

* Preliminary changes for 516

* Also removes the goon folder

* Fixes a BUNCH of UIs

* update our things

* debug proc

* le maintainer verb

* fix strip panel

* browseroutput => chat_panel

* prettier, remove obsolete bat

* tidu tgui say css

* href purge

* 515 compat

* 515 compat 2

* more required chores

* comments

* fully working 515

* bungle

* correct this

* fixes 515 support

* prettier

* new CI

* fixes old href styles sneaking in

* update docs to reflect href changes

* more href fixes (thanks cdui)

* MORE href nonsense

* even more hrefs (seriously wtf)

* Update code/modules/admin/permissionverbs/permissionedit.dm

* error on fail

---------

Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
This commit is contained in:
S34N
2024-04-15 18:49:50 +00:00
committed by GitHub
co-authored by AffectedArc07
parent 95efc8fbda
commit 0b838dc3c4
216 changed files with 2971 additions and 15327 deletions
@@ -330,7 +330,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
A.overlays += source
source.layer = old_layer
source.plane = old_plane
to_chat(src, "<span class='ghostalert'><a href=?src=[UID()];reenter=1>(Click to re-enter)</a></span>")
to_chat(src, "<span class='ghostalert'><a href=byond://?src=[UID()];reenter=1>(Click to re-enter)</a></span>")
if(sound)
SEND_SOUND(src, sound(sound))
@@ -209,11 +209,11 @@
medical = R.fields["p_stat"]
mental = R.fields["m_stat"]
var/medical_status = hasHUD(user, EXAMINE_HUD_MEDICAL_WRITE) ? "<a href='?src=[UID()];medical=1'>\[[medical]\]</a>" : "\[[medical]\]"
var/mental_status = hasHUD(user, EXAMINE_HUD_MEDICAL_WRITE) ? "<a href='?src=[UID()];mental=1'>\[[mental]\]</a>" : "\[[mental]\]"
var/medical_status = hasHUD(user, EXAMINE_HUD_MEDICAL_WRITE) ? "<a href='byond://?src=[UID()];medical=1'>\[[medical]\]</a>" : "\[[medical]\]"
var/mental_status = hasHUD(user, EXAMINE_HUD_MEDICAL_WRITE) ? "<a href='byond://?src=[UID()];mental=1'>\[[mental]\]</a>" : "\[[mental]\]"
msg += "<span class='deptradio'>Physical status: </span>[medical_status]\n"
msg += "<span class='deptradio'>Mental Status: </span>[mental_status]\n"
msg += "<span class='deptradio'>Medical records:</span> <a href='?src=[UID()];medrecord=`'>\[View\]</a> <a href='?src=[UID()];medrecordadd=`'>\[Add comment\]</a>\n"
msg += "<span class='deptradio'>Medical records:</span> <a href='byond://?src=[UID()];medrecord=`'>\[View\]</a> <a href='byond://?src=[UID()];medrecordadd=`'>\[Add comment\]</a>\n"
if(hasHUD(user, EXAMINE_HUD_SECURITY_READ))
var/perpname = get_visible_name(TRUE)
@@ -234,9 +234,9 @@
else
commentLatest = "No entries." //If present but without entries (=target is recognized crew)
var/criminal_status = hasHUD(user, EXAMINE_HUD_SECURITY_WRITE) ? "<a href='?src=[UID()];criminal=1'>\[[criminal]\]</a>" : "\[[criminal]\]"
var/criminal_status = hasHUD(user, EXAMINE_HUD_SECURITY_WRITE) ? "<a href='byond://?src=[UID()];criminal=1'>\[[criminal]\]</a>" : "\[[criminal]\]"
msg += "<span class='deptradio'>Criminal status:</span> [criminal_status]\n"
msg += "<span class='deptradio'>Security records:</span> <a href='?src=[UID()];secrecordComment=`'>\[View comment log\]</a> <a href='?src=[UID()];secrecordadd=`'>\[Add comment\]</a>\n"
msg += "<span class='deptradio'>Security records:</span> <a href='byond://?src=[UID()];secrecordComment=`'>\[View comment log\]</a> <a href='byond://?src=[UID()];secrecordadd=`'>\[Add comment\]</a>\n"
msg += "<span class='deptradio'>Latest entry:</span> [commentLatest]\n"
@@ -496,7 +496,7 @@
to_chat(usr, "<b>Major Crimes:</b> [R.fields["ma_crim"]]")
to_chat(usr, "<b>Details:</b> [R.fields["ma_crim_d"]]")
to_chat(usr, "<b>Notes:</b> [R.fields["notes"]]")
to_chat(usr, "<a href='?src=[UID()];secrecordComment=`'>\[View Comment Log\]</a>")
to_chat(usr, "<a href='byond://?src=[UID()];secrecordComment=`'>\[View Comment Log\]</a>")
read = 1
if(!read)
@@ -524,7 +524,7 @@
else
to_chat(usr, "<span class='warning'>No comments found</span>")
if(hasHUD(usr, EXAMINE_HUD_SECURITY_WRITE))
to_chat(usr, "<a href='?src=[UID()];secrecordadd=`'>\[Add comment\]</a>")
to_chat(usr, "<a href='byond://?src=[UID()];secrecordadd=`'>\[Add comment\]</a>")
if(!read)
to_chat(usr, "<span class='warning'>Unable to locate a data core entry for this person.</span>")
@@ -601,7 +601,7 @@
to_chat(usr, "<b>Major Disabilities:</b> [R.fields["ma_dis"]]")
to_chat(usr, "<b>Details:</b> [R.fields["ma_dis_d"]]")
to_chat(usr, "<b>Notes:</b> [R.fields["notes"]]")
to_chat(usr, "<a href='?src=[UID()];medrecordComment=`'>\[View Comment Log\]</a>")
to_chat(usr, "<a href='byond://?src=[UID()];medrecordComment=`'>\[View Comment Log\]</a>")
read = 1
if(!read)
@@ -625,7 +625,7 @@
to_chat(usr, c)
else
to_chat(usr, "<span class='warning'>No comment found</span>")
to_chat(usr, "<a href='?src=[UID()];medrecordadd=`'>\[Add comment\]</a>")
to_chat(usr, "<a href='byond://?src=[UID()];medrecordadd=`'>\[Add comment\]</a>")
if(!read)
to_chat(usr, "<span class='warning'>Unable to locate a data core entry for this person.</span>")
+1 -1
View File
@@ -86,7 +86,7 @@
for(var/P in GLOB.dead_mob_list)
var/mob/M = P
if((M.client?.prefs.toggles2 & PREFTOGGLE_2_DEATHMESSAGE) && (isobserver(M) || M.stat == DEAD))
to_chat(M, "<span class='deadsay'><b>[mind.name]</b> has died at <b>[area_name]</b>. (<a href='?src=[M.UID()];jump=\ref[T]'>JMP</a>)</span>")
to_chat(M, "<span class='deadsay'><b>[mind.name]</b> has died at <b>[area_name]</b>. (<a href='byond://?src=[M.UID()];jump=\ref[T]'>JMP</a>)</span>")
if(last_words)
to_chat(M, "<span class='deadsay'><b>[p_their(TRUE)] last words were:</b> \"[last_words]\"</span>")
+8 -8
View File
@@ -296,8 +296,8 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
status_tab_data = show_borg_info(status_tab_data)
/mob/living/silicon/ai/proc/ai_alerts()
var/list/dat = list("<meta charset='utf-8'><head><title>Current Station Alerts</title><meta http-equiv='Refresh' content='10'></head><body>\n")
dat += "<a href='?src=[UID()];mach_close=aialerts'>Close</a><br><br>"
var/list/dat = list("<!DOCTYPE html><meta charset='utf-8'><head><title>Current Station Alerts</title><meta http-equiv='Refresh' content='10'></head><body>\n")
dat += "<a href='byond://?src=[UID()];mach_close=aialerts'>Close</a><br><br>"
var/list/list/temp_alarm_list = GLOB.alarm_manager.alarms.Copy()
for(var/cat in temp_alarm_list)
if(!(cat in alarms_listend_for))
@@ -320,7 +320,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
for(var/cam in C)
var/obj/machinery/camera/I = locateUID(cam)
if(!QDELETED(I))
dat2 += "[(dat2 == "") ? "" : " | "]<a href=?src=[UID()];switchcamera=[cam]>[I.c_tag]</A>"
dat2 += "[(dat2 == "") ? "" : " | "]<a href=byond://?src=[UID()];switchcamera=[cam]>[I.c_tag]</A>"
dat += "-- [area_name] ([(dat2 != "") ? dat2 : "No Camera"])"
else
dat += "-- [area_name] (No Camera)"
@@ -834,7 +834,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
var/d
var/area/bot_area
d += "<A HREF=?src=[UID()];botrefresh=\ref[Bot]>Query network status</A><br>"
d += "<A href=byond://?src=[UID()];botrefresh=\ref[Bot]>Query network status</A><br>"
d += "<table width='100%'><tr><td width='40%'><h3>Name</h3></td><td width='20%'><h3>Status</h3></td><td width='30%'><h3>Location</h3></td><td width='10%'><h3>Control</h3></td></tr>"
for(var/mob/living/simple_animal/bot/Bot in GLOB.bots_list)
@@ -844,8 +844,8 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
//If the bot is on, it will display the bot's current mode status. If the bot is not mode, it will just report "Idle". "Inactive if it is not on at all.
d += "<td width='20%'>[Bot.on ? "[Bot.mode ? "<span class='average'>[ Bot.mode_name[Bot.mode] ]</span>": "<span class='good'>Idle</span>"]" : "<span class='bad'>Inactive</span>"]</td>"
d += "<td width='30%'>[bot_area.name]</td>"
d += "<td width='10%'><A HREF=?src=[UID()];interface=\ref[Bot]>Interface</A></td>"
d += "<td width='10%'><A HREF=?src=[UID()];callbot=\ref[Bot]>Call</A></td>"
d += "<td width='10%'><A href=byond://?src=[UID()];interface=\ref[Bot]>Interface</A></td>"
d += "<td width='10%'><A href=byond://?src=[UID()];callbot=\ref[Bot]>Call</A></td>"
d += "</tr>"
d = format_text(d)
@@ -884,14 +884,14 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
if(O)
var/obj/machinery/camera/C = locateUID(O[1])
if(O.len == 1 && !QDELETED(C) && C.can_use())
queueAlarm("--- [class] alarm detected in [A.name]! (<A HREF=?src=[UID()];switchcamera=[O[1]]>[C.c_tag]</A>)", class)
queueAlarm("--- [class] alarm detected in [A.name]! (<A href=byond://?src=[UID()];switchcamera=[O[1]]>[C.c_tag]</A>)", class)
else if(O && O.len)
var/foo = 0
var/dat2 = ""
for(var/thing in O)
var/obj/machinery/camera/I = locateUID(thing)
if(!QDELETED(I))
dat2 += "[(!foo) ? "" : " | "]<A HREF=?src=[UID()];switchcamera=[thing]>[I.c_tag]</A>" //I'm not fixing this shit...
dat2 += "[(!foo) ? "" : " | "]<A href=byond://?src=[UID()];switchcamera=[thing]>[I.c_tag]</A>" //I'm not fixing this shit...
foo = 1
queueAlarm(text ("--- [] alarm detected in []! ([])", class, A.name, dat2), class)
else
+1 -1
View File
@@ -99,7 +99,7 @@ GLOBAL_VAR_INIT(announcing_vox, 0) // Stores the time of the last announcement
var/list/localdat = list()
var/uid_cache = UID() // Saves proc jumping
for(var/word in word_list)
localdat += "<a href='?src=[uid_cache];say_word=[word]'>[word]</a>"
localdat += "<a href='byond://?src=[uid_cache];say_word=[word]'>[word]</a>"
return localdat.Join(" / ")
/mob/living/silicon/ai/proc/ai_announcement()
@@ -354,7 +354,7 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo
if(O.client && (ROLE_PAI in O.client.prefs.be_special))
if(player_old_enough_antag(O.client,ROLE_PAI))
if(check_recruit(O))
to_chat(O, "<span class='boldnotice'>A pAI card activated by [user.real_name] is looking for personalities. (<a href='?src=[O.UID()];jump=\ref[P]'>Teleport</a> | <a href='?src=[UID()];signup=\ref[O]'>Sign Up</a>)</span>")
to_chat(O, "<span class='boldnotice'>A pAI card activated by [user.real_name] is looking for personalities. (<a href='byond://?src=[O.UID()];jump=\ref[P]'>Teleport</a> | <a href='byond://?src=[UID()];signup=\ref[O]'>Sign Up</a>)</span>")
//question(O.client)
/datum/paiController/proc/check_recruit(mob/dead/observer/O)
@@ -169,7 +169,7 @@
if(alarm_types_show["Power"])
msg += "POWER: [alarm_types_show["Power"]] alarms detected. - "
msg += "<A href=?src=[UID()];showalerts=1'>\[Show Alerts\]</a>"
msg += "<A href=byond://?src=[UID()];showalerts=1'>\[Show Alerts\]</a>"
var/msg_text = msg.Join("")
to_chat(src, msg_text)
@@ -192,7 +192,7 @@
if(alarm_types_clear["Power"])
msg += "POWER: [alarm_types_clear["Power"]] alarms cleared. - "
msg += "<A href=?src=[UID()];showalerts=1'>\[Show Alerts\]</a>"
msg += "<A href=byond://?src=[UID()];showalerts=1'>\[Show Alerts\]</a>"
var/msg_text = msg.Join("")
to_chat(src, msg_text)
@@ -1011,9 +1011,9 @@ Pass a positive integer as an argument to override a bot's default speed.
var/hack
if(issilicon(user) || user.can_admin_interact()) // Allows silicons or admins to toggle the emag status of a bot.
hack += "[emagged ? "Software compromised! Unit may exhibit dangerous or erratic behavior." : "Unit operating normally. Release safety lock?"]<BR>"
hack += "Harm Prevention Safety System: <A href='?src=[UID()];operation=hack'>[emagged ? "<span class='bad'>DANGER</span>" : "Engaged"]</A><BR>"
hack += "Harm Prevention Safety System: <A href='byond://?src=[UID()];operation=hack'>[emagged ? "<span class='bad'>DANGER</span>" : "Engaged"]</A><BR>"
else if(!locked) // Humans with access can use this option to hide a bot from the AI's remote control panel and PDA control.
hack += "Remote network control radio: <A href='?src=[UID()];operation=remote'>[remote_disabled ? "Disconnected" : "Connected"]</A><BR>"
hack += "Remote network control radio: <A href='byond://?src=[UID()];operation=remote'>[remote_disabled ? "Disconnected" : "Connected"]</A><BR>"
return hack
/mob/living/simple_animal/bot/proc/showpai(mob/user)
@@ -1023,9 +1023,9 @@ Pass a positive integer as an argument to override a bot's default speed.
eject += "Personality card status: "
if(paicard)
if(client)
eject += "<A href='?src=[UID()];operation=ejectpai'>Active</A>"
eject += "<A href='byond://?src=[UID()];operation=ejectpai'>Active</A>"
else
eject += "<A href='?src=[UID()];operation=ejectpai'>Inactive</A>"
eject += "<A href='byond://?src=[UID()];operation=ejectpai'>Inactive</A>"
else if(!allow_pai || key)
eject += "Unavailable"
else
@@ -305,31 +305,31 @@
dat += "<b>Power level:</b> [cell ? cell.percent() : 0]%"
if(locked && !ai && !user.can_admin_interact())
dat += "&nbsp;<br /><div class='notice'>Controls are locked</div><A href='?src=[UID()];op=unlock'>Unlock Controls</A>"
dat += "&nbsp;<br /><div class='notice'>Controls are locked</div><A href='byond://?src=[UID()];op=unlock'>Unlock Controls</A>"
else
dat += "&nbsp;<br /><div class='notice'>Controls are unlocked</div><A href='?src=[UID()];op=lock'>Lock Controls</A><BR><BR>"
dat += "&nbsp;<br /><div class='notice'>Controls are unlocked</div><A href='byond://?src=[UID()];op=lock'>Lock Controls</A><BR><BR>"
dat += "<A href='?src=[UID()];op=power'>Toggle Power</A><BR>"
dat += "<A href='?src=[UID()];op=stop'>Stop</A><BR>"
dat += "<A href='?src=[UID()];op=go'>Proceed</A><BR>"
dat += "<A href='?src=[UID()];op=home'>Return to Home</A><BR>"
dat += "<A href='?src=[UID()];op=destination'>Set Destination</A><BR>"
dat += "<A href='?src=[UID()];op=setid'>Set Bot ID</A><BR>"
dat += "<A href='?src=[UID()];op=sethome'>Set Home</A><BR>"
dat += "<A href='?src=[UID()];op=autoret'>Toggle Auto Return Home</A> ([auto_return ? "On":"Off"])<BR>"
dat += "<A href='?src=[UID()];op=autopick'>Toggle Auto Pickup Crate</A> ([auto_pickup ? "On":"Off"])<BR>"
dat += "<A href='?src=[UID()];op=report'>Toggle Delivery Reporting</A> ([report_delivery ? "On" : "Off"])<BR>"
dat += "<A href='byond://?src=[UID()];op=power'>Toggle Power</A><BR>"
dat += "<A href='byond://?src=[UID()];op=stop'>Stop</A><BR>"
dat += "<A href='byond://?src=[UID()];op=go'>Proceed</A><BR>"
dat += "<A href='byond://?src=[UID()];op=home'>Return to Home</A><BR>"
dat += "<A href='byond://?src=[UID()];op=destination'>Set Destination</A><BR>"
dat += "<A href='byond://?src=[UID()];op=setid'>Set Bot ID</A><BR>"
dat += "<A href='byond://?src=[UID()];op=sethome'>Set Home</A><BR>"
dat += "<A href='byond://?src=[UID()];op=autoret'>Toggle Auto Return Home</A> ([auto_return ? "On":"Off"])<BR>"
dat += "<A href='byond://?src=[UID()];op=autopick'>Toggle Auto Pickup Crate</A> ([auto_pickup ? "On":"Off"])<BR>"
dat += "<A href='byond://?src=[UID()];op=report'>Toggle Delivery Reporting</A> ([report_delivery ? "On" : "Off"])<BR>"
if(load)
dat += "<A href='?src=[UID()];op=unload'>Unload Now</A><BR>"
dat += "<A href='byond://?src=[UID()];op=unload'>Unload Now</A><BR>"
dat += "<div class='notice'>The maintenance hatch is closed.</div>"
else
if(!ai)
dat += "<div class='notice'>The maintenance hatch is open.</div><BR>"
dat += "<b>Power cell:</b> "
if(cell)
dat += "<A href='?src=[UID()];op=cellremove'>Installed</A><BR>"
dat += "<A href='byond://?src=[UID()];op=cellremove'>Installed</A><BR>"
else
dat += "<A href='?src=[UID()];op=cellinsert'>Removed</A><BR>"
dat += "<A href='byond://?src=[UID()];op=cellinsert'>Removed</A><BR>"
wires.Interact(user)
else
@@ -237,7 +237,7 @@ While using this makes the system rely on OnFire, it still gives options for tim
mychild.key = elitemind.key
mychild.sentience_act()
dust_if_respawnable(elitemind)
notify_ghosts("\A [mychild] has been awakened in \the [get_area(src)]!", enter_link="<a href=?src=[UID()];follow=1>(Click to help)</a>", source = mychild, action = NOTIFY_FOLLOW)
notify_ghosts("\A [mychild] has been awakened in \the [get_area(src)]!", enter_link="<a href=byond://?src=[UID()];follow=1>(Click to help)</a>", source = mychild, action = NOTIFY_FOLLOW)
icon_state = "tumor_popped"
RegisterSignal(mychild, COMSIG_PARENT_QDELETING, PROC_REF(onEliteLoss))
INVOKE_ASYNC(src, PROC_REF(arena_checks))
@@ -252,7 +252,7 @@ While using this makes the system rely on OnFire, it still gives options for tim
mychild.maxHealth = mychild.maxHealth * 2.5
mychild.health = mychild.maxHealth
mychild.grab_ghost()
notify_ghosts("\A [mychild] has been challenged in \the [get_area(src)]!", enter_link="<a href=?src=[UID()];follow=1>(Click to help)</a>", source = mychild, action = NOTIFY_FOLLOW)
notify_ghosts("\A [mychild] has been challenged in \the [get_area(src)]!", enter_link="<a href=byond://?src=[UID()];follow=1>(Click to help)</a>", source = mychild, action = NOTIFY_FOLLOW)
INVOKE_ASYNC(src, PROC_REF(arena_checks))
AddComponent(/datum/component/proximity_monitor, ARENA_RADIUS)
@@ -293,7 +293,7 @@ GLOBAL_LIST_EMPTY(ts_infected_list)
notify_ghosts("[src] (player controlled) has appeared in [get_area(src)].")
else if(ai_playercontrol_allowtype)
var/image/alert_overlay = image('icons/mob/terrorspider.dmi', icon_state)
notify_ghosts("[src] has appeared in [get_area(src)].", enter_link = "<a href=?src=[UID()];activate=1>(Click to control)</a>", source = src, alert_overlay = alert_overlay, action = NOTIFY_ATTACK)
notify_ghosts("[src] has appeared in [get_area(src)].", enter_link = "<a href=byond://?src=[UID()];activate=1>(Click to control)</a>", source = src, alert_overlay = alert_overlay, action = NOTIFY_ATTACK)
/mob/living/simple_animal/hostile/poison/terror_spider/Destroy()
GLOB.ts_spiderlist -= src
+2 -2
View File
@@ -23,10 +23,10 @@
alert("You have logged in already with another key this round, please log out of this one NOW or risk being banned!")
if(matches)
if(M.client)
message_admins("<font color='red'><B>Notice: </B><font color='#EB4E00'><A href='?src=[usr.UID()];priv_msg=[src.client.ckey]'>[key_name_admin(src)]</A> has the same [matches] as <A href='?src=[usr.UID()];priv_msg=[M.client.ckey]'>[key_name_admin(M)]</A>.</font>", 1)
message_admins("<font color='red'><B>Notice: </B><font color='#EB4E00'><A href='byond://?src=[usr.UID()];priv_msg=[src.client.ckey]'>[key_name_admin(src)]</A> has the same [matches] as <A href='byond://?src=[usr.UID()];priv_msg=[M.client.ckey]'>[key_name_admin(M)]</A>.</font>", 1)
log_adminwarn("Notice: [key_name(src)] has the same [matches] as [key_name(M)].")
else
message_admins("<font color='red'><B>Notice: </B><font color='#EB4E00'><A href='?src=[usr.UID()];priv_msg=[src.client.ckey]'>[key_name_admin(src)]</A> has the same [matches] as [key_name_admin(M)] (no longer logged in). </font>", 1)
message_admins("<font color='red'><B>Notice: </B><font color='#EB4E00'><A href='byond://?src=[usr.UID()];priv_msg=[src.client.ckey]'>[key_name_admin(src)]</A> has the same [matches] as [key_name_admin(M)] (no longer logged in). </font>", 1)
log_adminwarn("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).")
/mob/Login()
+1 -1
View File
@@ -31,7 +31,7 @@
privacy_consent()
/mob/new_player/proc/privacy_consent()
var/output = GLOB.join_tos
var/output = "<!DOCTYPE html>[GLOB.join_tos]"
// Dont blank out the other window. This one is read only.
if(!GLOB.configuration.system.external_tos_handler)
src << browse(null, "window=playersetup")