fixes byond href styles

This commit is contained in:
Majkl-J
2025-02-26 02:25:38 -08:00
parent 136c0d4869
commit 1289ccf9de
26 changed files with 96 additions and 96 deletions
+1 -1
View File
@@ -72,7 +72,7 @@ GLOBAL_VAR(antag_prototypes)
if (R.emagged)
common_commands += "<a href='byond://?src=[REF(src)];silicon=unemagcyborgs'>Unemag slaved cyborgs</a>"
break
common_commands += "<a href='?src=[REF(src)];common=toggle_exploitables'>Toggle exploitables override</a>" //SKYRAT EDIT ADDITION -- EXPLOITABLES
common_commands += "<a href='byond://?src=[REF(src)];common=toggle_exploitables'>Toggle exploitables override</a>" //SKYRAT EDIT ADDITION -- EXPLOITABLES
return common_commands
/datum/mind/proc/get_special_statuses()
@@ -28,9 +28,9 @@ ADMIN_VERB(toggledchat, R_ADMIN, "Toggle Dead Chat", "Toggle dis bitch.", ADMIN_
/datum/admin_help/ClosureLinks(ref_src)
. = ..()
. += " (<A HREF='?_src_=holder;[HrefToken(forceGlobal = TRUE)];ahelp=[ref_src];ahelp_action=handle_issue'>HANDLE</A>)" //SKYRAT EDIT ADDITION
. += " (<A HREF='?_src_=holder;[HrefToken(forceGlobal = TRUE)];ahelp=[ref_src];ahelp_action=pingmute'>PING MUTE</A>)" //SKYRAT EDIT ADDITION
. += " (<A HREF='?_src_=holder;[HrefToken(forceGlobal = TRUE)];ahelp=[ref_src];ahelp_action=convert'>MHELP</A>)"
. += " (<A href='byond://?_src_=holder;[HrefToken(forceGlobal = TRUE)];ahelp=[ref_src];ahelp_action=handle_issue'>HANDLE</A>)" //SKYRAT EDIT ADDITION
. += " (<A href='byond://?_src_=holder;[HrefToken(forceGlobal = TRUE)];ahelp=[ref_src];ahelp_action=pingmute'>PING MUTE</A>)" //SKYRAT EDIT ADDITION
. += " (<A href='byond://?_src_=holder;[HrefToken(forceGlobal = TRUE)];ahelp=[ref_src];ahelp_action=convert'>MHELP</A>)"
//Let the initiator know their ahelp is being handled
/datum/admin_help/proc/handle_issue(key_name = key_name_admin(usr))
@@ -68,14 +68,14 @@
else if (SA.color_src == USE_ONE_COLOR)
shown_colors = 1
if((allow_advanced_colors || SA.always_color_customizable) && shown_colors)
dat += "<a href='?src=[REF(src)];key=[key];preference=reset_color;task=change_bodypart'>R</a>"
dat += "<a href='?src=[REF(src)];key=[key];preference=change_name;task=change_bodypart'>[acc_name]</a>"
dat += "<a href='byond://?src=[REF(src)];key=[key];preference=reset_color;task=change_bodypart'>R</a>"
dat += "<a href='byond://?src=[REF(src)];key=[key];preference=change_name;task=change_bodypart'>[acc_name]</a>"
if(allow_advanced_colors || SA.always_color_customizable)
if(shown_colors)
dat += "<BR>"
var/list/colorlist = mutant_bodyparts[key][MUTANT_INDEX_COLOR_LIST]
for(var/i in 1 to shown_colors)
dat += " <a href='?src=[REF(src)];key=[key];color_index=[i];preference=change_color;task=change_bodypart'><span class='color_holder_box' style='background-color:["#[colorlist[i]]"]'></span></a>"
dat += " <a href='byond://?src=[REF(src)];key=[key];color_index=[i];preference=change_color;task=change_bodypart'><span class='color_holder_box' style='background-color:["#[colorlist[i]]"]'></span></a>"
return dat
/datum/preferences/proc/reset_colors()
@@ -34,28 +34,28 @@
var/index = 0
for(var/word in GLOB.vox_sounds)
index++
dat += "<A href='?src=[REF(src)];say_word=[word]'>[capitalize(word)]</A>"
dat += "<A href='byond://?src=[REF(src)];say_word=[word]'>[capitalize(word)]</A>"
if(index != GLOB.vox_sounds.len)
dat += " / "
if(VOX_HL)
var/index = 0
for(var/word in GLOB.vox_sounds_hl)
index++
dat += "<A href='?src=[REF(src)];say_word=[word]'>[capitalize(word)]</A>"
dat += "<A href='byond://?src=[REF(src)];say_word=[word]'>[capitalize(word)]</A>"
if(index != GLOB.vox_sounds_hl.len)
dat += " / "
if(VOX_MIL)
var/index = 0
for(var/word in GLOB.vox_sounds_mil)
index++
dat += "<A href='?src=[REF(src)];say_word=[word]'>[capitalize(word)]</A>"
dat += "<A href='byond://?src=[REF(src)];say_word=[word]'>[capitalize(word)]</A>"
if(index != GLOB.vox_sounds_mil.len)
dat += " / "
if(VOX_BMS)
var/index = 0
for(var/word in GLOB.vox_sounds_bms)
index++
dat += "<A href='?src=[REF(src)];say_word=[word]'>[capitalize(word)]</A>"
dat += "<A href='byond://?src=[REF(src)];say_word=[word]'>[capitalize(word)]</A>"
if(index != GLOB.vox_sounds_bms.len)
dat += " / "
@@ -8,7 +8,7 @@
/// The first 1-FLAVOR_PREVIEW_LIMIT characters in the mob's client's silicon_flavor_text preference datum. FLAVOR_PREVIEW_LIMIT is defined in flavor_defines.dm.
var/silicon_preview_text = copytext_char((client?.prefs.read_preference(/datum/preference/text/silicon_flavor_text)), 1, FLAVOR_PREVIEW_LIMIT)
flavor_text_link = span_notice("[silicon_preview_text]... <a href='?src=[REF(src)];lookup_info=open_examine_panel'>Look closer?</a>")
flavor_text_link = span_notice("[silicon_preview_text]... <a href='byond://?src=[REF(src)];lookup_info=open_examine_panel'>Look closer?</a>")
if (flavor_text_link)
. += flavor_text_link
@@ -21,4 +21,4 @@
if(length_char(temporary_flavor_text) <= 40)
. += span_notice("<b>They look different than usual:</b> [temporary_flavor_text]")
else
. += span_notice("<b>They look different than usual:</b> [copytext_char(temporary_flavor_text, 1, 37)]... <a href='?src=[REF(src)];temporary_flavor=1'>More...</a>")
. += span_notice("<b>They look different than usual:</b> [copytext_char(temporary_flavor_text, 1, 37)]... <a href='byond://?src=[REF(src)];temporary_flavor=1'>More...</a>")
@@ -5,4 +5,4 @@
if(length_char(temporary_flavor_text) <= 40)
. += span_notice("[temporary_flavor_text]")
else
. += span_notice("[copytext_char(temporary_flavor_text, 1, 37)]... <a href='?src=[REF(src)];temporary_flavor=1'>More...</a>")
. += span_notice("[copytext_char(temporary_flavor_text, 1, 37)]... <a href='byond://?src=[REF(src)];temporary_flavor=1'>More...</a>")
@@ -412,7 +412,7 @@
return message
message += span_danger("\nCurrent degradation/max: [span_blue("<b>[current_degradation]</b>")]/<b>[max_degradation]</b>.")
message += span_notice("\n<a href='?src=[REF(src)];[DEATH_CONSEQUENCES_SHOW_HEALTH_ANALYZER_DATA]=1'>View degradation specifics?</a>")
message += span_notice("\n<a href='byond://?src=[REF(src)];[DEATH_CONSEQUENCES_SHOW_HEALTH_ANALYZER_DATA]=1'>View degradation specifics?</a>")
if (permakill_if_at_max_degradation)
message += span_revenwarning("\n\n<b><i>SUBJECT WILL BE PERMANENTLY KILLED IF DEGRADATION REACHES MAXIMUM!</i></b>")
@@ -23,7 +23,7 @@
for(var/client/staff as anything in GLOB.admins)
if(staff?.prefs.read_preference(/datum/preference/toggle/comms_notification))
SEND_SOUND(staff, sound('sound/misc/server-ready.ogg'))
message_admins("<font color='[COLOR_ADMIN_PINK]'>DELAM: Round timer under 30 minutes! [ADMIN_VERBOSEJMP(sm)] will perform an automatic delam suppression once integrity reaches 0%. (<a href='?src=[REF(src)];togglesuppression=yes'>TOGGLE AUTOMATIC INTERVENTION)</a>)</font>")
message_admins("<font color='[COLOR_ADMIN_PINK]'>DELAM: Round timer under 30 minutes! [ADMIN_VERBOSEJMP(sm)] will perform an automatic delam suppression once integrity reaches 0%. (<a href='byond://?src=[REF(src)];togglesuppression=yes'>TOGGLE AUTOMATIC INTERVENTION)</a>)</font>")
sm.station_notified = TRUE
/datum/sm_delam/Topic(href, href_list)
@@ -96,10 +96,10 @@
var/datum/event_spawner_instance/ESI = managed_instances["[panel_id]"]
if(!ESI)
return
dat += "<a href='?src=[REF(src)];inst_pref=return;id=[ESI.id]'>Return</a> ----- <a href='?src=[REF(src)];inst_pref=export;id=[ESI.id]'>Export</a> <a href='?src=[REF(src)];inst_pref=import;id=[ESI.id]'>Import</a><HR>"
dat += "<a href='?src=[REF(src)];inst_pref=job_name;id=[ESI.id]'>Job Name:</a> <b>[ESI.job_name]</b>"
dat += "<a href='byond://?src=[REF(src)];inst_pref=return;id=[ESI.id]'>Return</a> ----- <a href='byond://?src=[REF(src)];inst_pref=export;id=[ESI.id]'>Export</a> <a href='byond://?src=[REF(src)];inst_pref=import;id=[ESI.id]'>Import</a><HR>"
dat += "<a href='byond://?src=[REF(src)];inst_pref=job_name;id=[ESI.id]'>Job Name:</a> <b>[ESI.job_name]</b>"
dat += "<BR><font color='#777777'><i>This will appear on the person's ID</i></font>"
dat += "<BR><a href='?src=[REF(src)];inst_pref=flavor_text;id=[ESI.id]'>Flavor Text:</a> <i>[ESI.flavor_text]</i>"
dat += "<BR><a href='byond://?src=[REF(src)];inst_pref=flavor_text;id=[ESI.id]'>Flavor Text:</a> <i>[ESI.flavor_text]</i>"
dat += "<BR><font color='#777777'><i>The player will be greeted with the flavor text. Tell him who his supervisors are, if any.</i></font>"
var/outfit_name
var/datum/outfit/OU
@@ -109,12 +109,12 @@
else
OU = ESI.used_outfit
outfit_name = initial(OU.name)
dat += "<BR>Allow Loadout: <a href='?src=[REF(src)];inst_pref=loadout;id=[ESI.id]'>[ESI.gets_loadout ? "Yes" : "No"]</a>"
dat += "<BR>Allow Loadout: <a href='byond://?src=[REF(src)];inst_pref=loadout;id=[ESI.id]'>[ESI.gets_loadout ? "Yes" : "No"]</a>"
dat += "<BR><font color='#777777'><i>Whether loadout from prefs is allowed.</i></font>"
dat += "<BR><a href='?src=[REF(src)];inst_pref=used_outfit;id=[ESI.id]'>Used Outfit:</a> [outfit_name]"
dat += "<BR><a href='byond://?src=[REF(src)];inst_pref=used_outfit;id=[ESI.id]'>Used Outfit:</a> [outfit_name]"
dat += "<BR><font color='#777777'><i>Which outfit is used for the spawned player. Below you can preview contents of the selected one.</i></font>"
if(ESI.used_outfit)
dat += "<BR><a href='?src=[REF(src)];inst_pref=show_outfit_equipment;id=[ESI.id]'>[ESI.show_outfit_equipment ? "Hide outfit equipment" : "Show outfit equipment"]</a>"
dat += "<BR><a href='byond://?src=[REF(src)];inst_pref=show_outfit_equipment;id=[ESI.id]'>[ESI.show_outfit_equipment ? "Hide outfit equipment" : "Show outfit equipment"]</a>"
if(OU && ESI.show_outfit_equipment)
dat += "<HR><b>Outfit equipment:</b>"
var/obj/item/display = initial(OU.uniform)
@@ -172,43 +172,43 @@
dat += "<HR>"
dat += "<font color='#777777'><i>Here you can add extra equipment on top of loadout, if possible those will be auto equipped.</i></font>"
dat += "<BR><font color='#777777'><i>You HAVE to add them as typed paths(/obj/item/gun/energy/e_gun). Search in Game Panel to find desired paths.</i></font>"
dat += "<BR><b>Additional equipment: <a href='?src=[REF(src)];inst_pref=add_equip;id=[ESI.id]'>Add</a></b>"
dat += "<BR><b>Additional equipment: <a href='byond://?src=[REF(src)];inst_pref=add_equip;id=[ESI.id]'>Add</a></b>"
for(var/eq in ESI.additional_equipment)
var/obj/item/equip = eq
dat += "<BR><a href='?src=[REF(src)];inst_pref=remove_equip;equip=[eq];id=[ESI.id]'>[initial(equip.name)]</a><font color='#777777'> - ([eq])</font>"
dat += "<BR><a href='byond://?src=[REF(src)];inst_pref=remove_equip;equip=[eq];id=[ESI.id]'>[initial(equip.name)]</a><font color='#777777'> - ([eq])</font>"
dat += "<HR>"
dat += "<font color='#777777'><i>Outfits limit on what airlocks can someone access, or what headset and frequences they have. Here you can edit those things</i></font>"
dat += "<BR><b>Access overrides: </b>"
for(var/access_key in ESI.access_override)
dat += "<a href='?src=[REF(src)];inst_pref=remove_access;id=[ESI.id];access=[access_key]'>[access_key]</a>"
dat += " <- <a href='?src=[REF(src)];inst_pref=add_access;id=[ESI.id]'>Add</a>"
dat += "<a href='byond://?src=[REF(src)];inst_pref=remove_access;id=[ESI.id];access=[access_key]'>[access_key]</a>"
dat += " <- <a href='byond://?src=[REF(src)];inst_pref=add_access;id=[ESI.id]'>Add</a>"
dat += "<BR><font color='#777777'><i>Add access in NUMBERS. If no numbers are in the list, then the access will not be overriden. If you want to remove all access, add only a 0</i></font>"
dat += "<BR><font color='#777777'><i>See '/code/__DEFINES/access.dm' for an access list. (401-Faction Public, 402-Faction Crew, 403-Faction Command)</i></font>"
dat += "<BR><b>Headset override: </b>"
if(ESI.headset_override)
var/obj/item/headset = ESI.headset_override
dat += "<a href='?src=[REF(src)];inst_pref=remove_headset;id=[ESI.id]'>[initial(headset.name)]</a><font color='#777777'> - ([ESI.headset_override])</font>"
dat += " <- <a href='?src=[REF(src)];inst_pref=set_headset;id=[ESI.id]'>Set</a>"
dat += "<a href='byond://?src=[REF(src)];inst_pref=remove_headset;id=[ESI.id]'>[initial(headset.name)]</a><font color='#777777'> - ([ESI.headset_override])</font>"
dat += " <- <a href='byond://?src=[REF(src)];inst_pref=set_headset;id=[ESI.id]'>Set</a>"
dat += "<BR><font color='#777777'><i>Here you can override the headset, make sure to pick one which has the proper key with radio frequences for your role</i></font>"
dat += "<HR>"
dat += "<b>Allowed Species:</b>"
for(var/spec in ESI.species_whitelist)
dat += "<a href='?src=[REF(src)];inst_pref=remove_species;id=[ESI.id];species=[spec]'>[spec]</a>"
dat += " <- <a href='?src=[REF(src)];inst_pref=add_species;id=[ESI.id]'>Add</a>"
dat += "<a href='byond://?src=[REF(src)];inst_pref=remove_species;id=[ESI.id];species=[spec]'>[spec]</a>"
dat += " <- <a href='byond://?src=[REF(src)];inst_pref=add_species;id=[ESI.id]'>Add</a>"
dat += "<BR><font color='#777777'><i>If no species are in the list, then any species can join as this role.</i></font>"
dat += "<BR><b>Allowed Genders:</b>"
for(var/gend in ESI.gender_whitelist)
dat += "<a href='?src=[REF(src)];inst_pref=remove_gender;id=[ESI.id];gender=[gend]'>[gend]</a>"
dat += " <- <a href='?src=[REF(src)];inst_pref=add_gender;id=[ESI.id]'>Add</a>"
dat += "<a href='byond://?src=[REF(src)];inst_pref=remove_gender;id=[ESI.id];gender=[gend]'>[gend]</a>"
dat += " <- <a href='byond://?src=[REF(src)];inst_pref=add_gender;id=[ESI.id]'>Add</a>"
dat += "<BR><font color='#777777'><i>If no genders are in the list, then any gender can join as this role.</i></font>"
dat += "<BR><b>Allowed CKEYs:</b>"
for(var/ckey in ESI.ckey_whitelist)
dat += "<a href='?src=[REF(src)];inst_pref=remove_ckey;id=[ESI.id];ckey=[ckey]'>[ckey]</a>"
dat += " <- <a href='?src=[REF(src)];inst_pref=add_ckey;id=[ESI.id]'>Add</a>"
dat += "<a href='byond://?src=[REF(src)];inst_pref=remove_ckey;id=[ESI.id];ckey=[ckey]'>[ckey]</a>"
dat += " <- <a href='byond://?src=[REF(src)];inst_pref=add_ckey;id=[ESI.id]'>Add</a>"
dat += "<BR><font color='#777777'><i>If no ckeys are in the list, then any ckey can join as this role.</i></font>"
dat += "<BR>Spawner disappears after spawn: <a href='?src=[REF(src)];inst_pref=disappear_after_spawn;id=[ESI.id]'>[ESI.disappear_after_spawn ? "Yes" : "No"]</a>"
dat += "<BR>Prompt players when spawner created: <a href='?src=[REF(src)];inst_pref=prompt_players;id=[ESI.id]'>[ESI.prompt_players ? "Yes" : "No"]</a> <font color='#777777'><i>This will only prompt ckeys which can access the spawner.</i></font>"
dat += "<HR><center><a href='?src=[REF(src)];inst_pref=make_spawner;id=[ESI.id]'>Create spawner on current location</a></center>"
dat += "<BR>Spawner disappears after spawn: <a href='byond://?src=[REF(src)];inst_pref=disappear_after_spawn;id=[ESI.id]'>[ESI.disappear_after_spawn ? "Yes" : "No"]</a>"
dat += "<BR>Prompt players when spawner created: <a href='byond://?src=[REF(src)];inst_pref=prompt_players;id=[ESI.id]'>[ESI.prompt_players ? "Yes" : "No"]</a> <font color='#777777'><i>This will only prompt ckeys which can access the spawner.</i></font>"
dat += "<HR><center><a href='byond://?src=[REF(src)];inst_pref=make_spawner;id=[ESI.id]'>Create spawner on current location</a></center>"
//Buttons for easy override for the faction stuff (for access and headset keys)
else
@@ -223,8 +223,8 @@
var/desc = ESI.flavor_text
if(length(desc) > 40)
desc = "[copytext_char(desc, 1, 57)]..."
dat += "<tr style='background-color:[bc_col]'><td>#[key]</td><td><b>[ESI.job_name]</b></td><td><i>[desc]</i></td><td><a href='?src=[REF(src)];pref=configure_instance;id=[key]'>Configure</a></td><td><a href='?src=[REF(src)];pref=clone_instance;id=[key]'>Clone</a></td></tr>"
dat += "<tr style='background-color:#33373C'><td>*</td><td><a href='?src=[REF(src)];pref=create_new_instance'>Create new</a></td><td></td><td></td><td></td></tr>"
dat += "<tr style='background-color:[bc_col]'><td>#[key]</td><td><b>[ESI.job_name]</b></td><td><i>[desc]</i></td><td><a href='byond://?src=[REF(src)];pref=configure_instance;id=[key]'>Configure</a></td><td><a href='byond://?src=[REF(src)];pref=clone_instance;id=[key]'>Clone</a></td></tr>"
dat += "<tr style='background-color:#33373C'><td>*</td><td><a href='byond://?src=[REF(src)];pref=create_new_instance'>Create new</a></td><td></td><td></td><td></td></tr>"
dat += "</table>"
winshow(usr, "event_spawn_window", TRUE)
@@ -48,7 +48,7 @@
if(WOUND_SEVERITY_CRITICAL)
. += "\t<span class='warning'><b>[t_His] [LB.name] is suffering [W.a_or_from] [W.get_topic_name(user)]!!</b></span>"
if(LB.current_gauze)
. += "\t<span class='notice'><i>[t_His] [LB.name] is [LB.current_gauze.get_gauze_usage_prefix()] with <a href='?src=[REF(LB.current_gauze)];remove=1'>[LB.current_gauze.get_gauze_description()]</a>.</i></span>"
. += "\t<span class='notice'><i>[t_His] [LB.name] is [LB.current_gauze.get_gauze_usage_prefix()] with <a href='byond://?src=[REF(LB.current_gauze)];remove=1'>[LB.current_gauze.get_gauze_description()]</a>.</i></span>"
if(!any_bodypart_damage)
. += "\t<span class='smallnotice'><i>[t_He] [t_Has] no significantly damaged bodyparts.</i></span>"
@@ -4,4 +4,4 @@
/// Gets the name of the wound with any interactable topic if possible
/datum/wound/proc/get_topic_name(mob/user)
return show_wound_topic(user) ? "<a href='?src=[REF(src)];wound_topic=1'>[lowertext(name)]</a>" : lowertext(name)
return show_wound_topic(user) ? "<a href='byond://?src=[REF(src)];wound_topic=1'>[lowertext(name)]</a>" : lowertext(name)
+1 -1
View File
@@ -6,7 +6,7 @@
mentor_datum.following = M
usr.reset_perspective(M)
add_verb(src,/client/proc/mentor_unfollow)
to_chat(usr, span_info("Click the <a href='?_src_=mentor;mentor_unfollow=1;[MentorHrefToken(TRUE)]'>\"Stop Following\"</a> button here or in the Mentor tab to stop following [key_name(M)]."))
to_chat(usr, span_info("Click the <a href='byond://?_src_=mentor;mentor_unfollow=1;[MentorHrefToken(TRUE)]'>\"Stop Following\"</a> button here or in the Mentor tab to stop following [key_name(M)]."))
orbiting = FALSE
else
var/mob/dead/observer/O = usr
@@ -73,9 +73,9 @@
if(key)
if(include_link)
if(CONFIG_GET(flag/mentors_mobname_only))
. += "<a href='?_src_=mentor;mentor_msg=[REF(target_mob)];[MentorHrefToken(TRUE)]'>"
. += "<a href='byond://?_src_=mentor;mentor_msg=[REF(target_mob)];[MentorHrefToken(TRUE)]'>"
else
. += "<a href='?_src_=mentor;mentor_msg=[ckey];[MentorHrefToken(TRUE)]'>"
. += "<a href='byond://?_src_=mentor;mentor_msg=[ckey];[MentorHrefToken(TRUE)]'>"
if(target_client && target_client?.holder && target_client?.holder.fakekey)
. += "Administrator"
@@ -97,6 +97,6 @@
. += "*no key*"
if(include_follow)
. += " (<a href='?_src_=mentor;mentor_follow=[REF(target_mob)];[MentorHrefToken(TRUE)]'>F</a>)"
. += " (<a href='byond://?_src_=mentor;mentor_follow=[REF(target_mob)];[MentorHrefToken(TRUE)]'>F</a>)"
return .
@@ -47,7 +47,7 @@ If anyone can figure out how to get Obsessed to work I would be very appreciativ
for(var/role in GLOB.special_roles)
if(role in list(ROLE_MALF, ROLE_PAI, ROLE_SENTIENCE, ROLE_OBSESSED))
continue
dat += "<a href='?src=[REF(src)];[HrefToken()];makeAntag=[role]'>Make [role](s)."
dat += "<a href='byond://?src=[REF(src)];[HrefToken()];makeAntag=[role]'>Make [role](s)."
if(antag_is_ghostrole(role))
dat += " (Requires Ghosts)"
dat += "</a><br>"
@@ -104,10 +104,10 @@
/// Builds the HTML panel entry for the round end report
/datum/opposing_force/proc/build_html_panel_entry()
var/list/opfor_entry = list("<b>[mind_reference.key]</b> - ")
opfor_entry += "<a href='?priv_msg=[ckey(mind_reference.key)]'>PM</a> "
opfor_entry += "<a href='byond://?priv_msg=[ckey(mind_reference.key)]'>PM</a> "
if(mind_reference.current)
opfor_entry += "<a href='?_src_=holder;[HrefToken()];adminplayerobservefollow=[REF(mind_reference?.current)]'>FLW</a> "
opfor_entry += "<a href='?src=[REF(src)];admin_pref=show_panel'>Show OPFOR Panel</a>"
opfor_entry += "<a href='byond://?_src_=holder;[HrefToken()];adminplayerobservefollow=[REF(mind_reference?.current)]'>FLW</a> "
opfor_entry += "<a href='byond://?src=[REF(src)];admin_pref=show_panel'>Show OPFOR Panel</a>"
return opfor_entry.Join()
/datum/opposing_force/ui_interact(mob/user, datum/tgui/ui)
@@ -701,7 +701,7 @@
log_admin(msg)
/datum/opposing_force/proc/send_admins_opfor_message(message)
message = "[span_pink("OPFOR:")] [span_admin("[message] (<a href='?src=[REF(src)];admin_pref=show_panel'>Show Panel</a>)")]"
message = "[span_pink("OPFOR:")] [span_admin("[message] (<a href='byond://?src=[REF(src)];admin_pref=show_panel'>Show Panel</a>)")]"
to_chat(GLOB.admins,
type = MESSAGE_TYPE_ADMINLOG,
html = message,
@@ -835,7 +835,7 @@
send_system_message("ERROR: You are muted.")
return
if(user.ckey != handling_admin && GLOB.directory[handling_admin])
to_chat(GLOB.directory[handling_admin], span_pink("OPFOR: [user] has pinged their OPFOR admin chat! (<a href='?src=[REF(src)];admin_pref=show_panel'>Show Panel</a>)"))
to_chat(GLOB.directory[handling_admin], span_pink("OPFOR: [user] has pinged their OPFOR admin chat! (<a href='byond://?src=[REF(src)];admin_pref=show_panel'>Show Panel</a>)"))
SEND_SOUND(GLOB.directory[handling_admin], sound('sound/misc/bloop.ogg'))
send_system_message("Handling admin pinged.")
COOLDOWN_START(src, ping_cooldown, OPFOR_PING_COOLDOWN)
@@ -2,14 +2,14 @@
. = ..()
if (target_record?.past_medical_records)
. += "<a href='?src=[REF(src)];hud=m;medrecords=1;examine_time=[world.time]'>\[View medical records\]</a>"
. += "<a href='byond://?src=[REF(src)];hud=m;medrecords=1;examine_time=[world.time]'>\[View medical records\]</a>"
if (target_record?.past_general_records)
. += "<a href='?src=[REF(src)];hud=m;genrecords=1;examine_time=[world.time]'>\[View general records\]</a>"
. += "<a href='byond://?src=[REF(src)];hud=m;genrecords=1;examine_time=[world.time]'>\[View general records\]</a>"
/mob/living/carbon/human/get_sechud_examine_info(mob/living/user, datum/record/crew/target_record)
. = ..()
if (target_record?.past_security_records)
. += "<a href='?src=[REF(src)];hud=s;secrecords=1;examine_time=[world.time]'>\[View past security records\]</a>"
. += "<a href='byond://?src=[REF(src)];hud=s;secrecords=1;examine_time=[world.time]'>\[View past security records\]</a>"
if (target_record?.past_general_records)
. += "<a href='?src=[REF(src)];hud=m;genrecords=1;examine_time=[world.time]'>\[View general records\]</a>"
. += "<a href='byond://?src=[REF(src)];hud=m;genrecords=1;examine_time=[world.time]'>\[View general records\]</a>"
@@ -215,9 +215,9 @@
qdel(query_get_new_polls)
return
if(query_get_new_polls.NextRow())
output +={"<a class="menu_button menu_newpoll" href='?src=[text_ref(src)];viewpoll=1'>POLLS (NEW)</a>"}
output +={"<a class="menu_button menu_newpoll" href='byond://?src=[text_ref(src)];viewpoll=1'>POLLS (NEW)</a>"}
else
output +={"<a class="menu_button" href='?src=[text_ref(src)];viewpoll=1'>POLLS</a>"}
output +={"<a class="menu_button" href='byond://?src=[text_ref(src)];viewpoll=1'>POLLS</a>"}
qdel(query_get_new_polls)
if(QDELETED(src))
return
@@ -100,27 +100,27 @@ GLOBAL_LIST_EMPTY(startup_messages)
dat += {"<div class="container_nav">"}
if(!SSticker || SSticker.current_state <= GAME_STATE_PREGAME)
dat += {"<a id="ready" class="menu_button" href='?src=[text_ref(src)];toggle_ready=1'>[ready == PLAYER_READY_TO_PLAY ? "<span class='checked'>☑</span> READY" : "<span class='unchecked'>☒</span> READY"]</a>"}
dat += {"<a id="ready" class="menu_button" href='byond://?src=[text_ref(src)];toggle_ready=1'>[ready == PLAYER_READY_TO_PLAY ? "<span class='checked'>☑</span> READY" : "<span class='unchecked'>☒</span> READY"]</a>"}
else
dat += {"
<a class="menu_button" href='?src=[text_ref(src)];late_join=1'>JOIN GAME</a>
<a class="menu_button" href='?src=[text_ref(src)];view_manifest=1'>CREW MANIFEST</a>
<a class="menu_button" href='byond://?src=[text_ref(src)];late_join=1'>JOIN GAME</a>
<a class="menu_button" href='byond://?src=[text_ref(src)];view_manifest=1'>CREW MANIFEST</a>
"}
dat += {"<a class="menu_button" href='?src=[text_ref(src)];character_directory=1'>CHARACTER DIRECTORY</a>"}
dat += {"<a class="menu_button" href='byond://?src=[text_ref(src)];character_directory=1'>CHARACTER DIRECTORY</a>"}
dat += {"<a class="menu_button" href='?src=[text_ref(src)];observe=1'>OBSERVE</a>"}
dat += {"<a class="menu_button" href='byond://?src=[text_ref(src)];observe=1'>OBSERVE</a>"}
dat += {"
<hr>
<a class="menu_button" href='?src=[text_ref(src)];character_setup=1'>SETUP CHARACTER (<span id="character_slot">[uppertext(client.prefs.read_preference(/datum/preference/name/real_name))]</span>)</a>
<a class="menu_button" href='?src=[text_ref(src)];game_options=1'>GAME OPTIONS</a>
<a id="be_antag" class="menu_button" href='?src=[text_ref(src)];toggle_antag=1'>[client.prefs.read_preference(/datum/preference/toggle/be_antag) ? "<span class='checked'>☑</span> BE ANTAGONIST" : "<span class='unchecked'>☒</span> BE ANTAGONIST"]</a>
<a class="menu_button" href='byond://?src=[text_ref(src)];character_setup=1'>SETUP CHARACTER (<span id="character_slot">[uppertext(client.prefs.read_preference(/datum/preference/name/real_name))]</span>)</a>
<a class="menu_button" href='byond://?src=[text_ref(src)];game_options=1'>GAME OPTIONS</a>
<a id="be_antag" class="menu_button" href='byond://?src=[text_ref(src)];toggle_antag=1'>[client.prefs.read_preference(/datum/preference/toggle/be_antag) ? "<span class='checked'>☑</span> BE ANTAGONIST" : "<span class='unchecked'>☒</span> BE ANTAGONIST"]</a>
<hr>
<a class="menu_button" href='?src=[text_ref(src)];server_swap=1'>SWAP SERVERS</a>
<a class="menu_button" href='byond://?src=[text_ref(src)];server_swap=1'>SWAP SERVERS</a>
"}
if(length(GLOB.lobby_station_traits))
dat += {"<a class="menu_button" href='?src=[text_ref(src)];job_traits=1'>JOB TRAITS</a>"}
dat += {"<a class="menu_button" href='byond://?src=[text_ref(src)];job_traits=1'>JOB TRAITS</a>"}
if(!is_guest_key(src.key))
dat += playerpolls()
@@ -1,7 +1,7 @@
#define LINK_DENY "<a href='?_src_=usr;open_door=[REF(src)];user=[REF(user)];action=deny'>\a (deny)</a>"
#define LINK_OPEN "<a href='?_src_=usr;open_door=[REF(src)];user=[REF(user)];action=open'>\a (open)</a>"
#define LINK_BOLT "<a href='?_src_=usr;open_door=[REF(src)];user=[REF(user)];action=bolt'>\a (bolt)</a>"
#define LINK_SHOCK "<a href='?_src_=usr;open_door=[REF(src)];user=[REF(user)];action=shock'>\a (shock)</a>"
#define LINK_DENY "<a href='byond://?_src_=usr;open_door=[REF(src)];user=[REF(user)];action=deny'>\a (deny)</a>"
#define LINK_OPEN "<a href='byond://?_src_=usr;open_door=[REF(src)];user=[REF(user)];action=open'>\a (open)</a>"
#define LINK_BOLT "<a href='byond://?_src_=usr;open_door=[REF(src)];user=[REF(user)];action=bolt'>\a (bolt)</a>"
#define LINK_SHOCK "<a href='byond://?_src_=usr;open_door=[REF(src)];user=[REF(user)];action=shock'>\a (shock)</a>"
/obj/machinery/door/airlock
//so the AI doesn't get spammed
@@ -29,10 +29,10 @@
if(AI.deployed_shell)
if(!is_station_level(AI.deployed_shell.registered_z))
continue
to_chat(AI.deployed_shell, "<b><a href='?src=[REF(AI)];track=[html_encode(user.name)]'>[user]</a></b> is requesting you to open the [src] [LINK_DENY][LINK_OPEN][LINK_BOLT][LINK_SHOCK]")
to_chat(AI.deployed_shell, "<b><a href='byond://?src=[REF(AI)];track=[html_encode(user.name)]'>[user]</a></b> is requesting you to open the [src] [LINK_DENY][LINK_OPEN][LINK_BOLT][LINK_SHOCK]")
if(!is_station_level(AI.registered_z))
continue
to_chat(AI, "<b><a href='?src=[REF(AI)];track=[html_encode(user.name)]'>[user]</a></b> is requesting you to open the [src] [LINK_DENY][LINK_OPEN][LINK_BOLT][LINK_SHOCK]")
to_chat(AI, "<b><a href='byond://?src=[REF(AI)];track=[html_encode(user.name)]'>[user]</a></b> is requesting you to open the [src] [LINK_DENY][LINK_OPEN][LINK_BOLT][LINK_SHOCK]")
requesters[user.name] = world.time
#undef LINK_DENY
@@ -176,19 +176,19 @@
dat += "<span class='highlight'>[target.get_name()]</span> gene with <span class='highlight'>[disk.gene.get_name()]</span>?<br>"
if("insert")
dat += "<span class='highlight'>[disk.gene.get_name()]</span> gene into \the <span class='highlight'>[seed]</span>?<br>"
dat += "</div><div class='line'><a href='?src=[REF(src)];gene=[REF(target)];op=[operation]'>Confirm</a> "
dat += "<a href='?src=[REF(src)];abort=1'>Abort</a></div>"
dat += "</div><div class='line'><a href='byond://?src=[REF(src)];gene=[REF(target)];op=[operation]'>Confirm</a> "
dat += "<a href='byond://?src=[REF(src)];abort=1'>Abort</a></div>"
popup.set_content(dat)
popup.open()
return
dat+= "<div class='statusDisplay'>"
dat += "<div class='line'><div class='statusLabel'>Plant Sample:</div><div class='statusValue'><a href='?src=[REF(src)];eject_seed=1'>"
dat += "<div class='line'><div class='statusLabel'>Plant Sample:</div><div class='statusValue'><a href='byond://?src=[REF(src)];eject_seed=1'>"
dat += seed ? seed.name : "None"
dat += "</a></div></div>"
dat += "<div class='line'><div class='statusLabel'>Data Disk:</div><div class='statusValue'><a href='?src=[REF(src)];eject_disk=1'>"
dat += "<div class='line'><div class='statusLabel'>Data Disk:</div><div class='statusValue'><a href='byond://?src=[REF(src)];eject_disk=1'>"
if(!disk)
dat += "None"
else if(!disk.gene)
@@ -212,9 +212,9 @@
continue
dat += "<tr><td width='260px'>[G.get_name()]</td><td>"
if(can_extract && G.mutability_flags & PLANT_GENE_GRAFTABLE)
dat += "<a href='?src=[REF(src)];gene=[REF(G)];op=extract'>Extract</a>"
dat += "<a href='byond://?src=[REF(src)];gene=[REF(G)];op=extract'>Extract</a>"
if(can_insert && istype(disk.gene, G.type) && G.mutability_flags & PLANT_GENE_REMOVABLE)
dat += "<a href='?src=[REF(src)];gene=[REF(G)];op=replace'>Replace</a>"
dat += "<a href='byond://?src=[REF(src)];gene=[REF(G)];op=replace'>Replace</a>"
dat += "</td></tr>"
dat += "</table></div>"
@@ -226,16 +226,16 @@
var/datum/plant_gene/G = a
dat += "<tr><td width='260px'>[G.get_name()]</td><td>"
if(can_extract && G.mutability_flags & PLANT_GENE_GRAFTABLE)
dat += "<a href='?src=[REF(src)];gene=[REF(G)];op=extract'>Extract</a>"
dat += "<a href='byond://?src=[REF(src)];gene=[REF(G)];op=extract'>Extract</a>"
if(G.mutability_flags & PLANT_GENE_REMOVABLE)
dat += "<a href='?src=[REF(src)];gene=[REF(G)];op=remove'>Remove</a>"
dat += "<a href='byond://?src=[REF(src)];gene=[REF(G)];op=remove'>Remove</a>"
dat += "</td></tr>"
dat += "</table>"
else
dat += "No content-related genes detected in sample.<br>"
dat += "</div>"
if(can_insert && istype(disk.gene, /datum/plant_gene/reagent))
dat += "<a href='?src=[REF(src)];op=insert'>Insert: [disk.gene.get_name()]</a>"
dat += "<a href='byond://?src=[REF(src)];op=insert'>Insert: [disk.gene.get_name()]</a>"
dat += "<div class='line'><h3>Trait Genes</h3></div><div class='statusDisplay'>"
if(trait_genes.len)
@@ -244,15 +244,15 @@
var/datum/plant_gene/G = a
dat += "<tr><td width='260px'>[G.get_name()]</td><td>"
if(can_extract && G.mutability_flags & PLANT_GENE_GRAFTABLE)
dat += "<a href='?src=[REF(src)];gene=[REF(G)];op=extract'>Extract</a>"
dat += "<a href='byond://?src=[REF(src)];gene=[REF(G)];op=extract'>Extract</a>"
if(G.mutability_flags & PLANT_GENE_REMOVABLE)
dat += "<a href='?src=[REF(src)];gene=[REF(G)];op=remove'>Remove</a>"
dat += "<a href='byond://?src=[REF(src)];gene=[REF(G)];op=remove'>Remove</a>"
dat += "</td></tr>"
dat += "</table>"
else
dat += "No trait-related genes detected in sample.<br>"
if(can_insert && istype(disk.gene, /datum/plant_gene/trait))
dat += "<a href='?src=[REF(src)];op=insert'>Insert: [disk.gene.get_name()]</a>"
dat += "<a href='byond://?src=[REF(src)];op=insert'>Insert: [disk.gene.get_name()]</a>"
dat += "</div>"
else
dat += "<br>No sample found.<br><span class='highlight'>Please, insert a plant sample to use this device.</span>"
@@ -114,7 +114,7 @@ GLOBAL_LIST_INIT(job_exempt_cache, list())
dat += "<b>[department.department_name]</b><br>"
for(var/datum/job/job as anything in department.department_jobs)
job_count++
dat += "<a [is_job_exempt_from(target_ckey, job.title) ? "class='linkOn'" : ""] href='?_src_=holder;[HrefToken()];getjobexempttask=[target_ckey];task=togglejob;job=[job.title]'>[job.title]</a><br>"
dat += "<a [is_job_exempt_from(target_ckey, job.title) ? "class='linkOn'" : ""] href='byond://?_src_=holder;[HrefToken()];getjobexempttask=[target_ckey];task=togglejob;job=[job.title]'>[job.title]</a><br>"
dat += "</tr></td></table>"
var/datum/browser/popup = new(user, "job_exempt_menu", "Job Exemption Menu", 730, 650)
popup.set_content(dat.Join())
@@ -1,6 +1,6 @@
/atom/proc/examine_title_worn(mob/user)
var/regular_examine = src.examine_title(user)
if(HAS_TRAIT_FROM(src, TRAIT_WORN_EXAMINE, TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM)) // Uses /datum/element/examined_when_worn
return "<a href='?src=[REF(src)];examine_loadout=1;'>[regular_examine]</a>"
return "<a href='byond://?src=[REF(src)];examine_loadout=1;'>[regular_examine]</a>"
else
return regular_examine
@@ -69,7 +69,7 @@
SSticker.quote_of_the_round_attribution = "[found_name], [found_job]"
SSticker.quote_of_the_round_record_start = null //Chosen!
SSticker.quote_of_the_round_ckey = found_user.ckey ? found_user.ckey : "NO CKEY" //It's possible to be null.
message_admins("[found_message] by [ADMIN_LOOKUPFLW(found_user)] has been randomly selected as quote of the round. <a href='?src=[REF(src)];cancel_quote=1'>Click here to change</a>.")
message_admins("[found_message] by [ADMIN_LOOKUPFLW(found_user)] has been randomly selected as quote of the round. <a href='byond://?src=[REF(src)];cancel_quote=1'>Click here to change</a>.")
log_world("[key_name(found_user)] has been randomly selected for quote of the round with the quote \"[found_message]\".")
/obj/machinery/telecomms/hub/Topic(href, href_list)
@@ -59,12 +59,12 @@
if(roundstart)
if(!can_run_post_roundstart)
return "<a class='linkOff'>Fire</a> <a class='linkOff'>Schedule</a>"
return "<a href='?src=[REF(src)];action=fire'>Fire</a> <a href='?src=[REF(src)];action=schedule'>Schedule</a>"
return "<a href='byond://?src=[REF(src)];action=fire'>Fire</a> <a href='byond://?src=[REF(src)];action=schedule'>Schedule</a>"
else
return "<a href='?src=[REF(src)];action=fire'>Fire</a> <a href='?src=[REF(src)];action=schedule'>Schedule</a> <a href='?src=[REF(src)];action=force_next'>Force Next</a>"
return "<a href='byond://?src=[REF(src)];action=fire'>Fire</a> <a href='byond://?src=[REF(src)];action=schedule'>Schedule</a> <a href='byond://?src=[REF(src)];action=force_next'>Force Next</a>"
else
if(roundstart)
return "<a href='?src=[REF(src)];action=force_next'>Force Roundstart</a>"
return "<a href='byond://?src=[REF(src)];action=force_next'>Force Roundstart</a>"
else
return "<a class='linkOff'>Fire</a> <a class='linkOff'>Schedule</a> <a class='linkOff'>Force Next</a>"
@@ -191,7 +191,7 @@ SUBSYSTEM_DEF(gamemode)
else if(!sch_event.alerted_admins && world.time >= sch_event.start_time - 1 MINUTES)
///Alert admins 1 minute before running and allow them to cancel or refund the event, once again.
sch_event.alerted_admins = TRUE
message_admins("Scheduled Event: [sch_event.event] will run in [(sch_event.start_time - world.time) / 10] seconds. (<a href='?src=[REF(sch_event)];action=cancel'>CANCEL</a>) (<a href='?src=[REF(sch_event)];action=refund'>REFUND</a>)")
message_admins("Scheduled Event: [sch_event.event] will run in [(sch_event.start_time - world.time) / 10] seconds. (<a href='byond://?src=[REF(sch_event)];action=cancel'>CANCEL</a>) (<a href='byond://?src=[REF(sch_event)];action=refund'>REFUND</a>)")
if(!storyteller_halted && next_storyteller_process <= world.time && storyteller)
// We update crew information here to adjust population scalling and event thresholds for the storyteller.
@@ -388,9 +388,9 @@ SUBSYSTEM_DEF(gamemode)
var/datum/scheduled_event/scheduled = new (passed_event, world.time + passed_time, passed_cost, passed_ignore, passed_announce)
var/round_started = SSticker.HasRoundStarted()
if(round_started)
message_admins("Event: [passed_event] has been scheduled to run in [passed_time / 10] seconds. (<a href='?src=[REF(scheduled)];action=cancel'>CANCEL</a>) (<a href='?src=[REF(scheduled)];action=refund'>REFUND</a>)")
message_admins("Event: [passed_event] has been scheduled to run in [passed_time / 10] seconds. (<a href='byond://?src=[REF(scheduled)];action=cancel'>CANCEL</a>) (<a href='byond://?src=[REF(scheduled)];action=refund'>REFUND</a>)")
else //Only roundstart events can be scheduled before round start
message_admins("Event: [passed_event] has been scheduled to run on roundstart. (<a href='?src=[REF(scheduled)];action=cancel'>CANCEL</a>)")
message_admins("Event: [passed_event] has been scheduled to run on roundstart. (<a href='byond://?src=[REF(scheduled)];action=cancel'>CANCEL</a>)")
scheduled_events += scheduled
/datum/controller/subsystem/gamemode/proc/update_crew_infos()
@@ -40,9 +40,9 @@
/datum/scheduled_event/proc/get_href_actions()
var/round_started = SSticker.HasRoundStarted()
if(round_started)
return "<a href='?src=[REF(src)];action=fire'>Fire</a> <a href='?src=[REF(src)];action=reschedule'>Reschedule</a> <a href='?src=[REF(src)];action=cancel'>Cancel</a> <a href='?src=[REF(src)];action=refund'>Refund</a></td>"
return "<a href='byond://?src=[REF(src)];action=fire'>Fire</a> <a href='byond://?src=[REF(src)];action=reschedule'>Reschedule</a> <a href='byond://?src=[REF(src)];action=cancel'>Cancel</a> <a href='byond://?src=[REF(src)];action=refund'>Refund</a></td>"
else
return "<a href='?src=[REF(src)];action=cancel'>Cancel</a>"
return "<a href='byond://?src=[REF(src)];action=cancel'>Cancel</a>"
/// Try and fire off the scheduled event
/datum/scheduled_event/proc/try_fire()