diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 89894f3674..a95505d6cf 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -18,7 +18,7 @@
icon_state = "ai"
move_resist = MOVE_FORCE_OVERPOWERING
density = TRUE
- mobility_flags = NONE
+ mobility_flags = ALL
status_flags = CANSTUN|CANPUSH
a_intent = INTENT_HARM //so we always get pushed instead of trying to swap
sight = SEE_TURFS | SEE_MOBS | SEE_OBJS
@@ -326,8 +326,8 @@
// AIs are immobile
/mob/living/silicon/ai/update_mobility()
- mobility_flags = NONE
- return NONE
+ mobility_flags = ALL
+ return ALL
/mob/living/silicon/ai/proc/ai_cancel_call()
set category = "Malfunction"
diff --git a/modular_citadel/code/modules/admin/topic.dm b/modular_citadel/code/modules/admin/topic.dm
new file mode 100644
index 0000000000..26bc902bef
--- /dev/null
+++ b/modular_citadel/code/modules/admin/topic.dm
@@ -0,0 +1,59 @@
+/datum/admins/proc/citaTopic(href, href_list)
+ if(href_list["makementor"])
+ makeMentor(href_list["makementor"])
+ else if(href_list["removementor"])
+ removeMentor(href_list["removementor"])
+
+/datum/admins/proc/makeMentor(ckey)
+ if(!usr.client)
+ return
+ if (!check_rights(0))
+ return
+ if(!ckey)
+ return
+ var/client/C = GLOB.directory[ckey]
+ if(C)
+ if(check_rights_for(C, R_ADMIN,0))
+ to_chat(usr, "The client chosen is an admin! Cannot mentorize.")
+ return
+ if(SSdbcore.Connect())
+ var/datum/DBQuery/query_get_mentor = SSdbcore.NewQuery("SELECT id FROM [format_table_name("mentor")] WHERE ckey = '[ckey]'")
+ if(query_get_mentor.NextRow())
+ to_chat(usr, "[ckey] is already a mentor.")
+ return
+ var/datum/DBQuery/query_add_mentor = SSdbcore.NewQuery("INSERT INTO `[format_table_name("mentor")]` (`id`, `ckey`) VALUES (null, '[ckey]')")
+ if(!query_add_mentor.warn_execute())
+ return
+ var/datum/DBQuery/query_add_admin_log = SSdbcore.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Added new mentor [ckey]');")
+ if(!query_add_admin_log.warn_execute())
+ return
+ else
+ to_chat(usr, "Failed to establish database connection. The changes will last only for the current round.")
+ new /datum/mentors(ckey)
+ to_chat(usr, "New mentor added.")
+
+/datum/admins/proc/removeMentor(ckey)
+ if(!usr.client)
+ return
+ if (!check_rights(0))
+ return
+ if(!ckey)
+ return
+ var/client/C = GLOB.directory[ckey]
+ if(C)
+ if(check_rights_for(C, R_ADMIN,0))
+ to_chat(usr, "The client chosen is an admin, not a mentor! Cannot de-mentorize.")
+ return
+ C.remove_mentor_verbs()
+ C.mentor_datum = null
+ GLOB.mentors -= C
+ if(SSdbcore.Connect())
+ var/datum/DBQuery/query_remove_mentor = SSdbcore.NewQuery("DELETE FROM [format_table_name("mentor")] WHERE ckey = '[ckey]'")
+ if(!query_remove_mentor.warn_execute())
+ return
+ var/datum/DBQuery/query_add_admin_log = SSdbcore.NewQuery("INSERT INTO `[format_table_name("admin_log")]` (`id` ,`datetime` ,`adminckey` ,`adminip` ,`log` ) VALUES (NULL , NOW( ) , '[usr.ckey]', '[usr.client.address]', 'Removed mentor [ckey]');")
+ if(!query_add_admin_log.warn_execute())
+ return
+ else
+ to_chat(usr, "Failed to establish database connection. The changes will last only for the current round.")
+ to_chat(usr, "Mentor removed.")
\ No newline at end of file
diff --git a/tgstation.dme b/tgstation.dme
index 595ef5eb11..074a127afb 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3103,9 +3103,11 @@
#include "modular_citadel\code\game\machinery\wishgranter.dm"
#include "modular_citadel\code\game\objects\cit_screenshake.dm"
#include "modular_citadel\code\game\objects\effects\temporary_visuals\souldeath.dm"
+#include "modular_citadel\code\modules\admin\admin.dm"
#include "modular_citadel\code\modules\admin\chat_commands.dm"
#include "modular_citadel\code\modules\admin\holder2.dm"
#include "modular_citadel\code\modules\admin\secrets.dm"
+#include "modular_citadel\code\modules\admin\topic.dm"
#include "modular_citadel\code\modules\arousal\arousal.dm"
#include "modular_citadel\code\modules\arousal\genitals.dm"
#include "modular_citadel\code\modules\arousal\genitals_sprite_accessories.dm"