mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 03:02:54 +00:00
[MIRROR] browse to browser continued (#11088)
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
2a0bb3120b
commit
590a653d5a
@@ -217,7 +217,11 @@
|
||||
to_chat(O, span_infoplain(span_bold("[U]") + " holds \a [itemname] up to one of your cameras ..."))
|
||||
else
|
||||
to_chat(O, span_infoplain(span_bold("<a href='byond://?src=\ref[O];track2=\ref[O];track=\ref[U];trackname=[U.name]'>[U]</a>") + " holds \a [itemname] up to one of your cameras ..."))
|
||||
O << browse(text("<HTML><HEAD><TITLE>[]</TITLE></HEAD><BODY><TT>[]</TT></BODY></HTML>", itemname, info), text("window=[]", itemname))
|
||||
|
||||
var/datum/browser/popup = new(O, itemname, itemname)
|
||||
popup.add_head_content("<TITLE>[itemname]</TITLE>")
|
||||
popup.set_content("<TT>[info]</TT>")
|
||||
popup.open()
|
||||
|
||||
else if (istype(W, /obj/item/camera_bug))
|
||||
if (!src.can_use())
|
||||
|
||||
@@ -242,7 +242,7 @@
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat = span_bold("Magnetic Control Console") + "<BR><BR>"
|
||||
var/dat = ""
|
||||
if(!autolink)
|
||||
dat += {"
|
||||
Frequency: <a href='byond://?src=\ref[src];operation=setfreq'>[frequency]</a><br>
|
||||
@@ -263,8 +263,9 @@
|
||||
dat += "Moving: <a href='byond://?src=\ref[src];operation=togglemoving'>[moving ? "Enabled":"Disabled"]</a>"
|
||||
|
||||
|
||||
user << browse("<html>[dat]</html>", "window=magnet;size=400x500")
|
||||
onclose(user, "magnet")
|
||||
var/datum/browser/popup = new(user, "magnet", "Magnetic Control Console", 400, 500)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/magnetic_controller/Topic(href, href_list)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
|
||||
@@ -56,9 +56,10 @@ Please wait until completion...</TT><BR>
|
||||
<A href='byond://?src=\ref[src];make=7'>Robot Frame (75,000 cc metal).<BR>
|
||||
"}
|
||||
|
||||
user << browse("<html><HEAD><TITLE>Robotic Fabricator Control Panel</TITLE></HEAD><TT>[dat]</TT></html>", "window=robot_fabricator")
|
||||
onclose(user, "robot_fabricator")
|
||||
return
|
||||
var/datum/browser/popup = new(user, "robot_fabricator", "Robot Fabricator")
|
||||
popup.add_head_content("<TITLE>Robotic Fabricator Control Panel</TITLE>")
|
||||
popup.set_content("<TT>[dat]</TT>")
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/robotic_fabricator/Topic(href, href_list)
|
||||
if(..())
|
||||
|
||||
@@ -32,8 +32,10 @@
|
||||
if(!selfdestructing)
|
||||
dat += "<br><br><A href='byond://?src=\ref[src];betraitor=1;traitormob=\ref[user]'>\"[pick("I want to switch teams.", "I want to work for you.", "Let me join you.", "I can be of use to you.", "You want me working for you, and here's why...", "Give me an objective.", "How's the 401k over at the Syndicate?")]\"</A><BR>"
|
||||
dat += temptext
|
||||
user << browse("<html>[dat]</html>", "window=syndbeacon")
|
||||
onclose(user, "syndbeacon")
|
||||
|
||||
var/datum/browser/popup = new(user, "syndbeacon", "Ominous Beacon")
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/syndicate_beacon/Topic(href, href_list)
|
||||
if(..())
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
if(!selfdestructing)
|
||||
dat += "<br><br><A href='byond://?src=\ref[src];betraitor=1;traitormob=\ref[user]'>\"[pick("Send me some supplies!", "Transfer supplies.")]\"</A><BR>"
|
||||
dat += temptext
|
||||
user << browse("<html>[dat]</html>", "window=syndbeacon")
|
||||
onclose(user, "syndbeacon")
|
||||
|
||||
var/datum/browser/popup = new(user, "syndbeacon", "Ominous Beacon")
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/syndicate_beacon/virgo/Topic(href, href_list)
|
||||
if(href_list["betraitor"])
|
||||
|
||||
@@ -42,9 +42,10 @@
|
||||
if(src.occupant)
|
||||
dat += "[src.ready ? "<A href='byond://?src=\ref[src];implant=1'>Implant</A>" : "Recharging"]<BR>"
|
||||
user.set_machine(src)
|
||||
user << browse("<html>[dat]</html>", "window=implant")
|
||||
onclose(user, "implant")
|
||||
|
||||
var/datum/browser/popup = new(user, "implant", "Implant")
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/implantchair/Topic(href, href_list)
|
||||
if((get_dist(src, usr) <= 1) || isAI(usr))
|
||||
|
||||
@@ -26,9 +26,10 @@
|
||||
dat += span_bold("Four uses use them wisely:") + "<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];spell_teleport=1'>Teleport</A><BR>"
|
||||
dat += "Kind regards,<br>Wizards Federation<br><br>P.S. Don't forget to bring your gear, you'll need it to cast most spells.<HR>"
|
||||
user << browse("<html>[dat]</html>", "window=scroll")
|
||||
onclose(user, "scroll")
|
||||
return
|
||||
|
||||
var/datum/browser/popup = new(user, "scroll", "Scroll")
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/item/teleportation_scroll/Topic(href, href_list)
|
||||
..()
|
||||
|
||||
@@ -483,4 +483,6 @@
|
||||
output += "</table></div>"
|
||||
qdel(select_query)
|
||||
|
||||
usr << browse("<html>[output]</html>","window=lookupbans;size=900x700")
|
||||
var/datum/browser/popup = new(owner, "lookupbans", "Lookup Bans", 900, 700)
|
||||
popup.set_content(output)
|
||||
popup.open()
|
||||
|
||||
@@ -190,7 +190,10 @@ var/savefile/Banlist
|
||||
|
||||
dat += "</table>"
|
||||
dat = "<HR>" + span_bold("Bans:") + " " + span_blue("(U) = Unban , (E) = Edit Ban") + " - " + span_green("([count] Bans)") + "<HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 >[dat]"
|
||||
usr << browse("<html>[dat]</html>", "window=unbanp;size=875x400")
|
||||
|
||||
var/datum/browser/popup = new(owner, "unbanp", "Unban", 875, 400)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
//////////////////////////////////// DEBUG ////////////////////////////////////
|
||||
|
||||
|
||||
@@ -67,7 +67,11 @@
|
||||
dat = "<table width='100%'>[dat]</table>"
|
||||
else
|
||||
dat = "No addresses in list."
|
||||
src << browse("<html>[dat]</html>","window=ToRban_show")
|
||||
|
||||
var/datum/browser/popup = new(src, "ToRban_show", "Torban")
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
if("remove")
|
||||
var/savefile/F = new(TORFILE)
|
||||
var/choice = tgui_input_list(src,"Please select an IP address to remove from the ToR banlist:","Remove ToR ban", F.dir)
|
||||
|
||||
@@ -53,8 +53,7 @@ GLOBAL_VAR_INIT(floorIsLava, 0)
|
||||
to_chat(usr, "Error: you are not an admin!")
|
||||
return
|
||||
|
||||
var/body = "<html><head><title>Options for [M.key]</title></head>"
|
||||
body += "<body>Options panel for" + span_bold("[M]")
|
||||
var/body = "Options panel for" + span_bold("[M]")
|
||||
if(M.client)
|
||||
body += " played by " + span_bold("[M.client]")
|
||||
body += "\[<A href='byond://?src=\ref[src];[HrefToken()];editrights=show'>[M.client.holder ? M.client.holder.rank_names() : "Player"]</A>\]"
|
||||
@@ -236,11 +235,13 @@ GLOBAL_VAR_INIT(floorIsLava, 0)
|
||||
else
|
||||
body += "<a href='byond://?src=\ref[src];[HrefToken()];toglang=\ref[M];lang=[html_encode(k)]' style='color:#ff0000'>[k]</a>"
|
||||
|
||||
body += {"<br>
|
||||
</body></html>
|
||||
"}
|
||||
body += {"<br>"}
|
||||
|
||||
var/datum/browser/popup = new(owner, "adminplayeropts", "Edit Player", 550, 515)
|
||||
popup.add_head_content("<title>Options for [M.key]</title>")
|
||||
popup.set_content(body)
|
||||
popup.open()
|
||||
|
||||
usr << browse(body, "window=adminplayeropts;size=550x515")
|
||||
feedback_add_details("admin_verb","SPP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
@@ -314,7 +315,7 @@ GLOBAL_VAR_INIT(floorIsLava, 0)
|
||||
to_chat(usr, "Error: you are not an admin!")
|
||||
return
|
||||
var/dat
|
||||
dat = text("<HEAD><TITLE>Admin Newscaster</TITLE></HEAD><H3>Admin Newscaster Unit</H3>")
|
||||
dat = text("<H3>Admin Newscaster Unit</H3>")
|
||||
|
||||
switch(admincaster_screen)
|
||||
if(0)
|
||||
@@ -547,10 +548,11 @@ GLOBAL_VAR_INIT(floorIsLava, 0)
|
||||
|
||||
//to_world("Channelname: [src.admincaster_feed_channel.channel_name] [src.admincaster_feed_channel.author]")
|
||||
//to_world("Msg: [src.admincaster_feed_message.author] [src.admincaster_feed_message.body]")
|
||||
usr << browse("<html>[dat]</html>", "window=admincaster_main;size=400x600")
|
||||
onclose(usr, "admincaster_main")
|
||||
|
||||
|
||||
var/datum/browser/popup = new(owner, "admincaster_main", "Admin Newscaster", 400, 600)
|
||||
popup.add_head_content("<TITLE>Admin Newscaster</TITLE>")
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/datum/admins/proc/Jobbans()
|
||||
if(!check_rights(R_BAN)) return
|
||||
@@ -562,13 +564,17 @@ GLOBAL_VAR_INIT(floorIsLava, 0)
|
||||
r = copytext( r, 1, findtext(r,"##") )//removes the description
|
||||
dat += text("<tr><td>[t] (<A href='byond://?src=\ref[src];[HrefToken()];removejobban=[r]'>unban</A>)</td></tr>")
|
||||
dat += "</table>"
|
||||
usr << browse("<html>[dat]</html>", "window=ban;size=400x400")
|
||||
|
||||
var/datum/browser/popup = new(owner, "ban", "Job Bans", 400, 400)
|
||||
popup.add_head_content("<TITLE>Admin Newscaster</TITLE>")
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/datum/admins/proc/Game()
|
||||
if(!check_rights(0)) return
|
||||
|
||||
var/dat = {"
|
||||
<html><center>"} + span_bold("Game Panel") + {"</center><hr>\n
|
||||
<center>"} + span_bold("Game Panel") + {"</center><hr>\n
|
||||
<A href='byond://?src=\ref[src];[HrefToken()];c_mode=1'>Change Game Mode</A><br>
|
||||
"}
|
||||
if(GLOB.master_mode == "secret")
|
||||
@@ -582,11 +588,12 @@ GLOBAL_VAR_INIT(floorIsLava, 0)
|
||||
<A href='byond://?src=\ref[src];[HrefToken()];create_mob=1'>Create Mob</A><br>
|
||||
<br><A href='byond://?src=\ref[src];[HrefToken()];vsc=airflow'>Edit Airflow Settings</A><br>
|
||||
<A href='byond://?src=\ref[src];[HrefToken()];vsc=phoron'>Edit Phoron Settings</A><br>
|
||||
<A href='byond://?src=\ref[src];[HrefToken()];vsc=default'>Choose a default ZAS setting</A><br></html>
|
||||
<A href='byond://?src=\ref[src];[HrefToken()];vsc=default'>Choose a default ZAS setting</A><br>
|
||||
"}
|
||||
|
||||
usr << browse(dat, "window=admin2;size=210x280")
|
||||
return
|
||||
var/datum/browser/popup = new(owner, "admin2", "Game Panel", 210, 280)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/datum/admins/proc/Secrets(var/datum/admin_secret_category/active_category = null)
|
||||
if(!check_rights(0)) return
|
||||
@@ -1255,7 +1262,9 @@ var/datum/announcement/minor/admin_min_announcer = new
|
||||
out += " None."
|
||||
out += " <a href='byond://?src=\ref[ticker.mode];[HrefToken()];add_antag_type=1'>\[+\]</a><br/>"
|
||||
|
||||
usr << browse("<html>[out]</html>", "window=edit_mode[src]")
|
||||
var/datum/browser/popup = new(owner, "edit_mode[src]", "Edit Game Mode")
|
||||
popup.set_content(out)
|
||||
popup.open()
|
||||
feedback_add_details("admin_verb","SGM")
|
||||
|
||||
|
||||
|
||||
@@ -115,8 +115,9 @@ world/New()
|
||||
else
|
||||
output += "Whoops, no reports!"
|
||||
|
||||
usr << browse("<html>[output]</html>", "window=news;size=600x400")
|
||||
|
||||
var/datum/browser/popup = new(src, "news", "News", 600, 400)
|
||||
popup.set_content(output)
|
||||
popup.open()
|
||||
|
||||
/client/proc/Report(mob/M as mob in world)
|
||||
set category = "Admin.Moderation"
|
||||
|
||||
@@ -721,8 +721,10 @@ ADMIN_VERB(removetickets, R_ADMIN, "Security Tickets", "Allows one to remove tic
|
||||
dat += "</table>"
|
||||
|
||||
qdel(query)
|
||||
usr << browse("<html>[dat]</html>", "window=library")
|
||||
onclose(usr, "library")
|
||||
|
||||
var/datum/browser/popup = new(src, "library", "Delete Book")
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/client/proc/toggle_spawning_with_recolour()
|
||||
set name = "Toggle Simple/Robot recolour verb"
|
||||
|
||||
@@ -232,7 +232,10 @@ var/savefile/Banlistjob
|
||||
|
||||
dat += "</table>"
|
||||
dat = "<HR>" + span_bold("Bans:") + " " span_blue("(U) = Unban , ") + " - " + span_green("([count] Bans)") + "<HR><table border=1 rules=all frame=void cellspacing=0 cellpadding=3 >[dat]"
|
||||
usr << browse("<html>[dat]</html>", "window=unbanp;size=875x400")
|
||||
|
||||
var/datum/browser/popup = new(owner, "unbanjob", "Unban Job", 875, 400)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/*/datum/admins/proc/permjobban(ckey, computerid, reason, bannedby, temp, minutes, rank)
|
||||
if(AddBanjob(ckey, computerid, reason, usr.ckey, 0, 0, job))
|
||||
|
||||
@@ -133,7 +133,10 @@
|
||||
output += "</table></div><div id='top'><b>Search:</b> <input type='text' id='filter' value='' style='width:70%;' onkeyup='updateSearch();'></div></body>"
|
||||
if(QDELETED(usr))
|
||||
return
|
||||
usr << browse("<!DOCTYPE html><html>[jointext(output, "")]</html>","window=editrights;size=1000x650")
|
||||
|
||||
var/datum/browser/popup = new(owner, "editrights", "Edit Rights", 1000, 650)
|
||||
popup.set_content(jointext(output, ""))
|
||||
popup.open()
|
||||
|
||||
/datum/admins/proc/edit_rights_topic(list/href_list)
|
||||
if(!check_rights(R_PERMISSIONS))
|
||||
|
||||
@@ -9,4 +9,7 @@
|
||||
var/dat = span_bold("Bombing List")
|
||||
for(var/l in GLOB.bombers)
|
||||
dat += text("[l]<BR>")
|
||||
user << browse("<html>[dat]</html>", "window=bombers")
|
||||
|
||||
var/datum/browser/popup = new(user, "bombers", "Bombers")
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
@@ -11,4 +11,7 @@
|
||||
if(H.dna && H.ckey)
|
||||
dat += "<tr><td>[H]</td><td>[H.dna.unique_enzymes]</td><td>[H.dna ? H.dna.b_type : DEFAULT_BLOOD_TYPE]</td></tr>"
|
||||
dat += "</table>"
|
||||
user << browse("<html>[dat]</html>", "window=DNA;size=440x410")
|
||||
|
||||
var/datum/browser/popup = new(user, "DNA", "DNA", 440, 410)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
@@ -16,4 +16,7 @@
|
||||
else if(!H.dna)
|
||||
dat += "<tr><td>[H]</td><td>H.dna = null</td></tr>"
|
||||
dat += "</table>"
|
||||
user << browse("<html>[dat]</html>", "window=fingerprints;size=440x410")
|
||||
|
||||
var/datum/browser/popup = new(user, "fingerprints", "Fingerprints", 440, 410)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
@@ -9,4 +9,6 @@
|
||||
dat += "<h4>Crew Manifest</h4>"
|
||||
dat += GLOB.data_core.get_manifest()
|
||||
|
||||
user << browse("<html>[dat]</html>", "window=manifest;size=370x420;can_close=1")
|
||||
var/datum/browser/popup = new(user, "manifest", "Manifest", 370, 420)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
@@ -12,4 +12,7 @@
|
||||
var/dat = span_bold("Showing last [length(GLOB.lawchanges)] law changes.") + "<HR>"
|
||||
for(var/sig in GLOB.lawchanges)
|
||||
dat += "[sig]<BR>"
|
||||
user << browse("<html>[dat]</html>", "window=GLOB.lawchanges;size=800x500")
|
||||
|
||||
var/datum/browser/popup = new(user, "lawchanges", "Lawcahnges", 800, 500)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
@@ -12,4 +12,7 @@
|
||||
var/dat = span_bold("Showing last [length(GLOB.lastsignalers)] signalers.") + "<HR>"
|
||||
for(var/sig in GLOB.lastsignalers)
|
||||
dat += "[sig]<BR>"
|
||||
user << browse("<html>[dat]</html>", "window=lastsignalers;size=800x500")
|
||||
|
||||
var/datum/browser/popup = new(user, "lastsignalers", "Last Signallers", 800, 500)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
@@ -21,7 +21,9 @@ var/inactive_keys = "None<br>"
|
||||
else
|
||||
dat += "<a href='byond://?src=\ref[src];_src_=holder;[HrefToken()];populate_inactive_customitems=1'>Populate list (requires an active database connection)</a><br>"
|
||||
|
||||
usr << browse("<html>[dat]</html>", "window=inactive_customitems;size=600x480")
|
||||
var/datum/browser/popup = new(src, "inactive_customitems", "Inactive Custom Items", 600, 480)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/proc/populate_inactive_customitems_list(var/client/C)
|
||||
set background = 1
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
else
|
||||
inactive_on_main_station++
|
||||
|
||||
var/output = {"<html><B>AIR SYSTEMS REPORT</B><HR>
|
||||
var/output = {"<B>AIR SYSTEMS REPORT</B><HR>
|
||||
<B>General Processing Data</B><BR>
|
||||
Cycle: [SSair.current_cycle]<br>
|
||||
Groups: [SSair.zones.len]<BR>
|
||||
@@ -36,10 +36,12 @@
|
||||
Hotspot Processing: [hotspots]<BR>
|
||||
<br>
|
||||
<B>Geometry Processing Data</B><BR>
|
||||
Tile Update: [SSair.tiles_to_update.len]<BR></html>
|
||||
Tile Update: [SSair.tiles_to_update.len]<BR>
|
||||
"}
|
||||
|
||||
usr << browse(output,"window=airreport")
|
||||
var/datum/browser/popup = new(src, "airreport", "Airreport")
|
||||
popup.set_content(output)
|
||||
popup.open()
|
||||
|
||||
/client/proc/fix_next_move()
|
||||
set category = "Debug.Game"
|
||||
@@ -95,7 +97,9 @@
|
||||
else
|
||||
output += " [device]<br>"
|
||||
|
||||
usr << browse("<html>[output]</html>","window=radioreport")
|
||||
var/datum/browser/popup = new(src, "radioreport", "Radioreport")
|
||||
popup.set_content(output)
|
||||
popup.open()
|
||||
feedback_add_details("admin_verb","RR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/reload_admins()
|
||||
|
||||
@@ -78,7 +78,7 @@ GLOBAL_LIST_BOILERPLATE(all_debugging_effects, /obj/effect/debugging)
|
||||
for(var/obj/machinery/camera/C in cameranet.cameras)
|
||||
CL += C
|
||||
|
||||
var/output = {""} + span_bold("CAMERA ANNOMALITIES REPORT") + {"<HR>
|
||||
var/output = span_bold("CAMERA ANNOMALITIES REPORT") + {"<HR>
|
||||
"} + span_bold("The following annomalities have been detected. The ones in red need immediate attention: Some of those in black may be intentional.") + {"<BR><ul>"}
|
||||
|
||||
for(var/obj/machinery/camera/C1 in CL)
|
||||
@@ -102,7 +102,10 @@ GLOBAL_LIST_BOILERPLATE(all_debugging_effects, /obj/effect/debugging)
|
||||
output += "<li>" + span_red("Camera not connected to wall at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Network: [C1.network]") + "</li>"
|
||||
|
||||
output += "</ul>"
|
||||
usr << browse("<html>[output]</html>","window=airreport;size=1000x500")
|
||||
|
||||
var/datum/browser/popup = new(src, "airreport", "Airreport", 1000, 500)
|
||||
popup.set_content(output)
|
||||
popup.open()
|
||||
feedback_add_details("admin_verb","mCRP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/intercom_view()
|
||||
|
||||
@@ -27,9 +27,10 @@
|
||||
dat += span_bold("Charge progress: [reload]/180:") + "<BR>"
|
||||
dat += "<A href='byond://?src=\ref[src];fire=1'>Open Fire</A><BR>"
|
||||
dat += "Deployment of weapon authorized by <br>[using_map.company_name] Naval Command<br><br>Remember, friendly fire is grounds for termination of your contract and life.<HR>"
|
||||
user << browse("<html>[dat]</html>", "window=scroll")
|
||||
onclose(user, "scroll")
|
||||
return
|
||||
|
||||
var/datum/browser/popup = new(user, "artillery", "Artillery")
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/artillerycontrol/Topic(href, href_list)
|
||||
..()
|
||||
|
||||
@@ -43,7 +43,10 @@
|
||||
dat += text("Phoron coins: [amt_phoron] <A href='byond://?src=\ref[src];remove=phoron'>Remove one</A><br>")
|
||||
if (amt_uranium)
|
||||
dat += text("Uranium coins: [amt_uranium] <A href='byond://?src=\ref[src];remove=uranium'>Remove one</A><br>")
|
||||
user << browse("<html>[dat]</html>", "window=moneybag")
|
||||
|
||||
var/datum/browser/popup = new(user, "moneybag", "Moneybag")
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/item/moneybag/attackby(obj/item/W, mob/user)
|
||||
..()
|
||||
|
||||
@@ -88,11 +88,10 @@
|
||||
dat += "<br>"
|
||||
dat += "<i>Device ID:</i> [machine_id]"
|
||||
|
||||
dat = "<html><head><title>Retail Scanner</title></head><body>[dat]</body></html>"
|
||||
|
||||
user << browse(dat, "window=retail;size=350x500")
|
||||
onclose(user, "retail")
|
||||
|
||||
var/datum/browser/popup = new(user, "retail", "Retail", 350, 500)
|
||||
popup.add_head_content("<title>Retail Scanner</title>")
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/item/retail_scanner/Topic(var/href, var/href_list)
|
||||
if(..())
|
||||
|
||||
@@ -22,7 +22,10 @@
|
||||
t += "#[i] | [display_data(line)] | "
|
||||
t += "<a href='byond://?src=\ref[src];edit=1;pos=[i]'>\[Edit\]</a> | "
|
||||
t += "<a href='byond://?src=\ref[src];remove=1;pos=[i]'>\[Remove\]</a><br>"
|
||||
user << browse("<html>[t]</html>", "window=list_pin_\ref[src];size=500x400")
|
||||
|
||||
var/datum/browser/popup = new(user, "list_pin_\ref[src]", null, 500, 400)
|
||||
popup.set_content(t)
|
||||
popup.open()
|
||||
|
||||
/datum/integrated_io/list/proc/add_to_list(mob/user, var/new_entry)
|
||||
if(!new_entry && user)
|
||||
|
||||
@@ -205,9 +205,9 @@ Book Cart End
|
||||
|
||||
/// Proc that handles sending the book information to the user, as well as some housekeeping stuff.
|
||||
/obj/item/book/proc/display_content(mob/living/user)
|
||||
if(!findtext(dat, regex("^<html")))
|
||||
dat = "<html>[dat]</html>"
|
||||
user << browse(replacetext(dat, "<html>", "<html><TT><I>Penned by [author].</I></TT> <BR>"), "window=book")
|
||||
var/datum/browser/popup = new(user, "book", "<TT><I>Penned by [author].</I></TT>")
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/item/book/attackby(obj/item/W, mob/user)
|
||||
if(carved)
|
||||
|
||||
@@ -52,12 +52,15 @@ GLOBAL_DATUM_INIT(mhelp_tickets, /datum/mentor_help_tickets, new)
|
||||
title = "Resolved Tickets"
|
||||
if(!l2b)
|
||||
return
|
||||
var/list/dat = list("<html><head><title>[title]</title></head>")
|
||||
var/list/dat = list()
|
||||
dat += "<A href='byond://?_src_=mentorholder;[HrefToken()];mhelp_tickets=[state]'>Refresh</A><br><br>"
|
||||
for(var/datum/mentor_help/MH as anything in l2b)
|
||||
dat += span_adminnotice(span_adminhelp("Ticket #[MH.id]") + " <A href='byond://?_src_=mentorholder;mhelp=\ref[MH];[HrefToken()];mhelp_action=ticket'>[MH.initiator_ckey]: [MH.name]</A>") + "<br>"
|
||||
dat += "</html>"
|
||||
usr << browse(dat.Join(), "window=mhelp_list[state];size=600x480")
|
||||
|
||||
var/datum/browser/popup = new(usr, "mhelp_list[state]", "Mentor Help List", 600, 480)
|
||||
popup.add_head_content("<title>[title]</title>")
|
||||
popup.set_content(dat.Join())
|
||||
popup.open()
|
||||
|
||||
//Tickets statpanel
|
||||
/datum/mentor_help_tickets/proc/stat_entry()
|
||||
@@ -269,7 +272,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/mticket_list)
|
||||
tgui_interact(usr.client.mob)
|
||||
|
||||
/datum/mentor_help/proc/TicketPanelLegacy()
|
||||
var/list/dat = list("<html><head><title>Ticket #[id]</title></head>")
|
||||
var/list/dat = list()
|
||||
var/ref_src = "\ref[src]"
|
||||
dat += "<h4>Mentor Help Ticket #[id]: [LinkedReplyName(ref_src)]</h4>"
|
||||
dat += span_bold("State: ")
|
||||
@@ -294,8 +297,11 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick/mticket_list)
|
||||
dat += "<br>" + span_bold("Log:") + "<br><br>"
|
||||
for(var/I in _interactions)
|
||||
dat += "[I]<br>"
|
||||
dat += "</html>"
|
||||
usr << browse(dat.Join(), "window=mhelp[id];size=620x480")
|
||||
|
||||
var/datum/browser/popup = new(usr, "mhelp[id]", "Mento Help [id]", 620, 480)
|
||||
popup.add_head_content("<title>Ticket #[id]</title>")
|
||||
popup.set_content(dat.Join())
|
||||
popup.open()
|
||||
|
||||
/datum/mentor_help/tgui_fallback(payload)
|
||||
if(..())
|
||||
|
||||
@@ -410,7 +410,10 @@ var/list/_simple_mob_default_emotes = list(
|
||||
HTML += "<hr />"
|
||||
HTML +="<a href='byond://?src=\ref[src];flavor_change=done'>\[Done\]</a>"
|
||||
HTML += "<tt></body></html>"
|
||||
src << browse(HTML, "window=flavor_changes;size=430x300")
|
||||
|
||||
var/datum/browser/popup = new(src, "flavor_changes", "Change Flavortexts", 430, 300)
|
||||
popup.set_content(HTML)
|
||||
popup.open()
|
||||
|
||||
/mob/living/carbon/human/proc/toggle_tail(var/setting,var/message = 0)
|
||||
if(!tail_style || !tail_style.ani_state)
|
||||
|
||||
@@ -537,7 +537,9 @@
|
||||
else
|
||||
dat += span_bold("Primarily [u_attack.attack_name]") + " - <a href='byond://?src=\ref[src];default_attk=\ref[u_attack]'>set default</a><br/><br/><br/>"
|
||||
|
||||
src << browse("<html>[dat]</html>", "window=checkattack")
|
||||
var/datum/browser/popup = new(src, "checkattack")
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/mob/living/carbon/human/Topic(href, href_list)
|
||||
if(href_list["default_attk"])
|
||||
@@ -555,7 +557,6 @@
|
||||
/mob/living/carbon/human/proc/set_default_attack(var/datum/unarmed_attack/u_attack)
|
||||
default_attack = u_attack
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/perform_cpr(var/mob/living/carbon/human/reviver)
|
||||
// Check for sanity
|
||||
if(!istype(reviver,/mob/living/carbon/human))
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
/mob/living/carbon/human
|
||||
var/datum/unarmed_attack/default_attack
|
||||
|
||||
/mob/living/carbon/human/verb/check_attacks()
|
||||
set name = "Check Attacks"
|
||||
set category = "IC.Game"
|
||||
set src = usr
|
||||
|
||||
var/dat = span_bold(span_giant("Known Attacks")) + "<br/><br/>"
|
||||
|
||||
for(var/datum/unarmed_attack/u_attack in species.unarmed_attacks)
|
||||
dat += span_bold("Primarily [u_attack.attack_name] ") + "<br/><br/><br/>"
|
||||
|
||||
src << browse("<html>[dat]</html>", "window=checkattack")
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/check_attacks()
|
||||
var/dat = span_bold(span_giant("Known Attacks")) + "<br/><br/>"
|
||||
|
||||
if(default_attack)
|
||||
dat += "Current default attack: [default_attack.attack_name] - <a href='byond://?src=\ref[src];default_attk=reset_attk'>reset</a><br/><br/>"
|
||||
|
||||
for(var/datum/unarmed_attack/u_attack in species.unarmed_attacks)
|
||||
if(u_attack == default_attack)
|
||||
dat += span_bold("Primarily [u_attack.attack_name]") + " - default - <a href='byond://?src=\ref[src];default_attk=reset_attk'>reset</a><br/><br/><br/>"
|
||||
else
|
||||
dat += span_bold("Primarily [u_attack.attack_name]") + " - <a href='byond://?src=\ref[src];default_attk=\ref[u_attack]'>set default</a><br/><br/><br/>"
|
||||
|
||||
src << browse("<html>[dat]</html>", "window=checkattack")
|
||||
|
||||
/mob/living/carbon/human/Topic(href, href_list)
|
||||
if(href_list["default_attk"])
|
||||
if(href_list["default_attk"] == "reset_attk")
|
||||
set_default_attack(null)
|
||||
else
|
||||
var/datum/unarmed_attack/u_attack = locate(href_list["default_attk"])
|
||||
if(u_attack && (u_attack in species.unarmed_attacks))
|
||||
set_default_attack(u_attack)
|
||||
check_attacks()
|
||||
return 1
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/proc/set_default_attack(var/datum/unarmed_attack/u_attack)
|
||||
default_attack = u_attack
|
||||
|
||||
/datum/unarmed_attack
|
||||
var/attack_name = "fist"
|
||||
|
||||
/datum/unarmed_attack
|
||||
bite/attack_name = "bite"
|
||||
bite/sharp/attack_name = "sharp bite"
|
||||
bite/strong/attack_name = "strong bite"
|
||||
punch/attack_name = "punch"
|
||||
kick/attack_name = "kick"
|
||||
stomp/attack_name = "stomp"
|
||||
stomp/weak/attack_name = "weak stomp"
|
||||
light_strike/attack_name = "light hit"
|
||||
diona attack_name = "tendrils"
|
||||
claws/attack_name = "claws"
|
||||
claws/strong/attack_name = "strong claws"
|
||||
slime_glomp/attack_name = "glomp"
|
||||
bite/sharp/numbing/attack_name = "numbing bite"
|
||||
@@ -3,6 +3,7 @@
|
||||
status_flags = GODMODE|CANPUSH
|
||||
has_huds = FALSE
|
||||
blocks_emissive = FALSE
|
||||
no_vore = TRUE //Dummies don't need bellies.
|
||||
|
||||
/mob/living/carbon/human/dummy/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -148,3 +149,43 @@
|
||||
/mob/living/carbon/human/stok/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_MONKEY_UNATHI)
|
||||
species.produceCopy(species.traits.Copy(),src,null,FALSE)
|
||||
|
||||
/mob/living/carbon/human/sergal/Initialize(mapload)
|
||||
h_style = "Sergal Plain"
|
||||
. = ..(mapload, SPECIES_SERGAL)
|
||||
|
||||
/mob/living/carbon/human/akula/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_AKULA)
|
||||
|
||||
/mob/living/carbon/human/nevrean/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_NEVREAN)
|
||||
|
||||
/mob/living/carbon/human/xenochimera/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_XENOCHIMERA)
|
||||
|
||||
/mob/living/carbon/human/spider/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_VASILISSAN)
|
||||
|
||||
/mob/living/carbon/human/vulpkanin/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_VULPKANIN)
|
||||
|
||||
/mob/living/carbon/human/protean/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_PROTEAN)
|
||||
|
||||
/mob/living/carbon/human/alraune/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_ALRAUNE)
|
||||
|
||||
/mob/living/carbon/human/shadekin/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_SHADEKIN)
|
||||
|
||||
/mob/living/carbon/human/altevian/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_ALTEVIAN)
|
||||
|
||||
/mob/living/carbon/human/lleill/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_LLEILL)
|
||||
|
||||
/mob/living/carbon/human/hanner/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_HANNER)
|
||||
|
||||
/mob/living/carbon/human/sparkledog/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_SPARKLE)
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
/mob/living/carbon/human/dummy
|
||||
no_vore = TRUE //Dummies don't need bellies.
|
||||
|
||||
/mob/living/carbon/human/sergal/Initialize(mapload)
|
||||
h_style = "Sergal Plain"
|
||||
. = ..(mapload, SPECIES_SERGAL)
|
||||
|
||||
/mob/living/carbon/human/akula/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_AKULA)
|
||||
|
||||
/mob/living/carbon/human/nevrean/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_NEVREAN)
|
||||
|
||||
/mob/living/carbon/human/xenochimera/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_XENOCHIMERA)
|
||||
|
||||
/mob/living/carbon/human/spider/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_VASILISSAN)
|
||||
|
||||
/mob/living/carbon/human/vulpkanin/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_VULPKANIN)
|
||||
|
||||
/mob/living/carbon/human/protean/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_PROTEAN)
|
||||
|
||||
/mob/living/carbon/human/alraune/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_ALRAUNE)
|
||||
|
||||
/mob/living/carbon/human/shadekin/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_SHADEKIN)
|
||||
|
||||
/mob/living/carbon/human/altevian/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_ALTEVIAN)
|
||||
|
||||
/mob/living/carbon/human/lleill/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_LLEILL)
|
||||
|
||||
/mob/living/carbon/human/hanner/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_HANNER)
|
||||
|
||||
/mob/living/carbon/human/sparkledog/Initialize(mapload)
|
||||
. = ..(mapload, SPECIES_SPARKLE)
|
||||
@@ -1083,7 +1083,7 @@
|
||||
to_chat(src, span_notice("You will [trait_injection_verb] your targets."))
|
||||
return
|
||||
if(choice == "Chemical Refresher")
|
||||
var/output = {""} + span_bold("Chemical Refresher!") + {"<HR>
|
||||
var/output = {"<HR>
|
||||
"} + span_bold("Options for venoms") + {"<BR>
|
||||
<BR>
|
||||
"} + span_bold("Size Chemicals") + {"<BR>
|
||||
@@ -1112,7 +1112,10 @@
|
||||
You can also bite synthetics, but due to how synths work, they won't have anything injected into them.
|
||||
<br>
|
||||
"}
|
||||
src << browse("<html>[output]</html>","window=chemicalrefresher")
|
||||
|
||||
var/datum/browser/popup = new(src, "chemicalrefresher", "Chemical Refresher")
|
||||
popup.set_content(output)
|
||||
popup.open()
|
||||
return
|
||||
else
|
||||
var/list/targets = list() //IF IT IS NOT BROKEN. DO NOT FIX IT. AND KEEP COPYPASTING IT (Pointing Rick Dalton: "That's my code!" ~CL)
|
||||
|
||||
@@ -297,138 +297,3 @@
|
||||
inserted_battery.battery_effect.ToggleActivate()
|
||||
src.visible_message(span_bold("[name]") + " states, \"Battery dump completed.\"")
|
||||
icon_state = "incubator"
|
||||
/* //This is old and unused.
|
||||
/obj/machinery/artifact_harvester/Topic(href, href_list)
|
||||
|
||||
if (href_list["harvest"])
|
||||
if(!inserted_battery)
|
||||
src.visible_message(span_bold("[src]") + " states, \"Cannot harvest. No battery inserted.\"")
|
||||
|
||||
else if(inserted_battery.stored_charge >= inserted_battery.capacity)
|
||||
src.visible_message(span_bold("[src]") + " states, \"Cannot harvest. battery is full.\"")
|
||||
|
||||
else
|
||||
|
||||
//locate artifact on analysis pad
|
||||
cur_artifact = null
|
||||
var/articount = 0
|
||||
var/obj/machinery/artifact/analysed
|
||||
for(var/obj/A in get_turf(owned_scanner))
|
||||
analysed = A
|
||||
articount++
|
||||
|
||||
if(articount <= 0)
|
||||
var/message = span_bold("[src]") + " states, \"Cannot harvest. No noteworthy energy signature isolated.\""
|
||||
src.visible_message(message)
|
||||
|
||||
else if(analysed && analysed.being_used)
|
||||
src.visible_message(span_bold("[src]") + " states, \"Cannot harvest. Source already being harvested.\"")
|
||||
|
||||
else
|
||||
if(articount > 1)
|
||||
state("Cannot harvest. Too many artifacts on the pad.")
|
||||
else if(analysed)
|
||||
cur_artifact = analysed
|
||||
|
||||
//if both effects are active, we can't harvest either
|
||||
var/datum/component/artifact_master/ScannedMaster = analysed.GetComponent(/datum/component/artifact_master)
|
||||
if(ScannedMaster && istype(ScannedMaster))
|
||||
active_effects = ScannedMaster.get_all_effects()
|
||||
var/list/active_effects = ScannedMaster.artifact_id.get_active_effects()
|
||||
|
||||
if(active_effects.len > 1)
|
||||
src.visible_message(span_bold("[src]") + " states, \"Cannot harvest. Source is emitting conflicting energy signatures.\"")
|
||||
else if(!active_effects.len)
|
||||
src.visible_message(span_bold("[src]") + " states, \"Cannot harvest. No energy emitting from source.\"")
|
||||
|
||||
else
|
||||
//see if we can clear out an old effect
|
||||
//delete it when the ids match to account for duplicate ids having different effects
|
||||
if(inserted_battery.battery_effect && inserted_battery.stored_charge <= 0)
|
||||
qdel(inserted_battery.battery_effect)
|
||||
inserted_battery.battery_effect = null
|
||||
|
||||
//
|
||||
var/datum/artifact_effect/source_effect
|
||||
var/datum/artifact_effect/active_effect = active_effects[1]
|
||||
|
||||
//if we already have charge in the battery, we can only recharge it from the source artifact
|
||||
if(inserted_battery.stored_charge > 0)
|
||||
var/battery_matches_primary_id = 0
|
||||
if(inserted_battery.battery_effect && inserted_battery.battery_effect.artifact_id == cur_artifact.artifact_master.artifact_id)
|
||||
battery_matches_primary_id = 1
|
||||
if(battery_matches_primary_id && active_effect.activated)
|
||||
//we're good to recharge the primary effect!
|
||||
source_effect = active_effect
|
||||
|
||||
if(!source_effect)
|
||||
src.visible_message(span_bold("[src]") + " states, \"Cannot harvest. Battery is charged with a different energy signature.\"")
|
||||
else
|
||||
//we're good to charge either
|
||||
if(active_effect.activated)
|
||||
//charge the primary effect
|
||||
source_effect = active_effect
|
||||
|
||||
if(source_effect)
|
||||
harvesting = 1
|
||||
update_use_power(USE_POWER_ACTIVE)
|
||||
cur_artifact.anchored = 1
|
||||
cur_artifact.being_used = 1
|
||||
icon_state = "incubator_on"
|
||||
var/message = span_bold("[src]") + " states, \"Beginning energy harvesting.\""
|
||||
src.visible_message(message)
|
||||
last_process = world.time
|
||||
|
||||
//duplicate the artifact's effect datum
|
||||
if(!inserted_battery.battery_effect)
|
||||
var/effecttype = source_effect.type
|
||||
var/datum/artifact_effect/E = new effecttype(inserted_battery)
|
||||
|
||||
//duplicate it's unique settings
|
||||
for(var/varname in list("chargelevelmax","artifact_id","effect","effectrange","trigger"))
|
||||
E.vars[varname] = source_effect.vars[varname]
|
||||
|
||||
//copy the new datum into the battery
|
||||
inserted_battery.battery_effect = E
|
||||
inserted_battery.stored_charge = 0
|
||||
|
||||
if (href_list["stopharvest"])
|
||||
if(harvesting)
|
||||
if(harvesting < 0 && inserted_battery.battery_effect && inserted_battery.battery_effect.activated)
|
||||
inserted_battery.battery_effect.ToggleActivate()
|
||||
harvesting = 0
|
||||
cur_artifact.anchored = 0
|
||||
cur_artifact.being_used = 0
|
||||
cur_artifact = null
|
||||
src.visible_message(span_bold("[name]") + " states, \"Energy harvesting interrupted.\"")
|
||||
icon_state = "incubator"
|
||||
|
||||
if (href_list["ejectbattery"])
|
||||
src.inserted_battery.loc = src.loc
|
||||
src.inserted_battery = null
|
||||
|
||||
if (href_list["drainbattery"])
|
||||
if(inserted_battery)
|
||||
if(inserted_battery.battery_effect && inserted_battery.stored_charge > 0)
|
||||
if(tgui_alert(usr, "This action will dump all charge, safety gear is recommended before proceeding","Warning",list("Continue","Cancel")) == "Continue")
|
||||
if(!inserted_battery.battery_effect.activated)
|
||||
inserted_battery.battery_effect.ToggleActivate(1)
|
||||
last_process = world.time
|
||||
harvesting = -1
|
||||
update_use_power(USE_POWER_ACTIVE)
|
||||
icon_state = "incubator_on"
|
||||
var/message = span_bold("[src]") + " states, \"Warning, battery charge dump commencing.\""
|
||||
src.visible_message(message)
|
||||
else
|
||||
var/message = span_bold("[src]") + " states, \"Cannot dump energy. Battery is drained of charge already.\""
|
||||
src.visible_message(message)
|
||||
else
|
||||
var/message = span_bold("[src]") + " states, \"Cannot dump energy. No battery inserted.\""
|
||||
src.visible_message(message)
|
||||
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=artharvester")
|
||||
usr.unset_machine(src)
|
||||
|
||||
updateDialog()
|
||||
*/
|
||||
|
||||
@@ -3341,7 +3341,6 @@
|
||||
#include "code\modules\mob\living\carbon\human\human_powers_YW.dm"
|
||||
#include "code\modules\mob\living\carbon\human\human_resist.dm"
|
||||
#include "code\modules\mob\living\carbon\human\human_species.dm"
|
||||
#include "code\modules\mob\living\carbon\human\human_species_vr.dm"
|
||||
#include "code\modules\mob\living\carbon\human\inventory.dm"
|
||||
#include "code\modules\mob\living\carbon\human\life.dm"
|
||||
#include "code\modules\mob\living\carbon\human\life_vr.dm"
|
||||
|
||||
Reference in New Issue
Block a user