diff --git a/baystation12.dme b/baystation12.dme
index 2355bffb6d..c88a93cd35 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -91,6 +91,7 @@
#define FILE_DIR "code/modules/admin/verbs"
#define FILE_DIR "code/modules/assembly"
#define FILE_DIR "code/modules/chemical"
+#define FILE_DIR "code/modules/client"
#define FILE_DIR "code/modules/clothing"
#define FILE_DIR "code/modules/clothing/glasses"
#define FILE_DIR "code/modules/clothing/head"
@@ -309,7 +310,6 @@
#include "code\datums\spells\turf_teleport.dm"
#include "code\datums\spells\wizard.dm"
#include "code\defines\atom.dm"
-#include "code\defines\client.dm"
#include "code\defines\global.dm"
#include "code\defines\hub.dm"
#include "code\defines\obj.dm"
@@ -797,6 +797,7 @@
#include "code\modules\admin\create_mob.dm"
#include "code\modules\admin\create_object.dm"
#include "code\modules\admin\create_turf.dm"
+#include "code\modules\admin\IsBanned.dm"
#include "code\modules\admin\NewBan.dm"
#include "code\modules\admin\newbanjob.dm"
#include "code\modules\admin\player_panel.dm"
@@ -839,6 +840,8 @@
#include "code\modules\chemical\Chemistry-Reagents.dm"
#include "code\modules\chemical\Chemistry-Recipes.dm"
#include "code\modules\chemical\Chemistry-Tools.dm"
+#include "code\modules\client\client defines.dm"
+#include "code\modules\client\client procs.dm"
#include "code\modules\clothing\costume.dm"
#include "code\modules\clothing\ears.dm"
#include "code\modules\clothing\gimmick.dm"
@@ -927,6 +930,7 @@
#include "code\modules\mob\living\damage_procs.dm"
#include "code\modules\mob\living\living.dm"
#include "code\modules\mob\living\living_defense.dm"
+#include "code\modules\mob\living\login.dm"
#include "code\modules\mob\living\say.dm"
#include "code\modules\mob\living\blob\blob.dm"
#include "code\modules\mob\living\carbon\carbon.dm"
@@ -1042,6 +1046,7 @@
#include "code\modules\mob\living\silicon\robot\say.dm"
#include "code\modules\mob\living\silicon\robot\wires.dm"
#include "code\modules\mob\new_player\hud.dm"
+#include "code\modules\mob\new_player\login.dm"
#include "code\modules\mob\new_player\new_player.dm"
#include "code\modules\mob\new_player\preferences.dm"
#include "code\modules\mob\new_player\preferences_setup.dm"
diff --git a/code/datums/configuration.dm b/code/datums/configuration.dm
index e2a0397860..f0cfee61df 100644
--- a/code/datums/configuration.dm
+++ b/code/datums/configuration.dm
@@ -14,6 +14,7 @@
var/log_adminchat = 0 // log admin chat messages
var/log_adminwarn = 0 // log warnings admins get about bomb construction and such
var/log_pda = 0 // log pda messages
+ var/log_hrefs = 0 // logs all links clicked in-game. Could be used for debugging and tracking down exploits
var/sql_enabled = 1 // for sql switching
var/allow_vote_restart = 0 // allow votes to restart
var/allow_vote_mode = 0 // allow votes to change mode
@@ -171,6 +172,9 @@
if ("log_pda")
config.log_pda = 1
+ if ("log_hrefs")
+ config.log_hrefs = 1
+
if ("allow_vote_restart")
config.allow_vote_restart = 1
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index 2040d87432..2e488ab427 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -248,7 +248,6 @@ client
if(ishuman(D))
body += ""
body += ""
- body += ""
body += ""
body += ""
body += ""
@@ -390,419 +389,382 @@ client
return html
-//All BYOND links pass through client/Topic() FIRST and are then directed to [hsrc]/Topic() by the ..() call at the end.
-client/Topic(href, href_list, hsrc)
- file("topic_log") << "[time2text(world.realtime, "DDD MMM DD YYYY")] at [time2text(world.timeofday, "hh:mm:ss")], [ckey], \"[url_encode(href)]\""
- // build some more useful info
- var/references = ""
- for(var/href_key in href_list)
- var/href_val = locate(href_list[href_key])
- references += "[href_key] = [href_val]("
- if(istype(href_val,/datum))
- references += "[href_val:type]"
- if(istype(href_val,/atom))
- references += " at [href_val:x],[href_val:y],[href_val:z]"
+/client/proc/view_var_Topic(href,href_list,hsrc)
+ //This will all be moved over to datum/admins/Topic() ~Carn
+ if( (usr.client == src) && src.holder )
+ . = 1 //default return
+ if (href_list["Vars"])
+ debug_variables(locate(href_list["Vars"]))
- references += "); "
- file("topic_log") << references
+ //~CARN: for renaming mobs (updates their real_name and their ID/PDA if applicable).
+ else if (href_list["rename"])
+ var/new_name = copytext(sanitize(input(usr,"What would you like to name this mob?","Input a name") as text|null),1,MAX_NAME_LEN)
+ if(!new_name) return
+ var/mob/M = locate(href_list["rename"])
+ if(!istype(M)) return
- sleep(3)
+ message_admins("Admin [key_name_admin(usr)] renamed [key_name_admin(M)] to [new_name].", 1)
+ if(istype(M, /mob/living/carbon/human))
+ for(var/obj/item/weapon/card/id/ID in M.contents)
+ if(ID.registered_name == M.real_name)
+ ID.name = "[new_name]'s ID Card ([ID.assignment])"
+ ID.registered_name = new_name
+ break
+ for(var/obj/item/device/pda/PDA in M.contents)
+ if(PDA.owner == M.real_name)
+ PDA.name = "PDA-[new_name] ([PDA.ownjob])"
+ PDA.owner = new_name
+ break
+ M.real_name = new_name
+ M.name = new_name
+ M.original_name = new_name
+ href_list["datumrefresh"] = href_list["rename"]
- //search the href for script injection //This is a temporary measure
- if( findtext(href,"