Ambitioncheck

This commit is contained in:
keronshb
2021-12-23 21:15:31 -05:00
16 changed files with 1064 additions and 48 deletions
+12 -2
View File
@@ -25,7 +25,9 @@
to_chat(usr, "<span class='warning'>You seem to be selecting a mob that doesn't exist anymore.</span>", confidential = TRUE)
return
var/body = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><title>Options for [M.key]</title></head>"
//ambition start
var/list/body = list("<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><title>Options for [M.key]</title></head>")
//ambition end
body += "<body>Options panel for <b>[M]</b>"
if(M.client)
body += " played by <b>[M.client]</b> "
@@ -125,6 +127,10 @@
body += "<A href='?_src_=holder;[HrefToken()];subtlemessage=[REF(M)]'>Subtle message</A> | "
// body += "<A href='?_src_=holder;[HrefToken()];playsoundto=[REF(M)]'>Play sound to</A> | "
body += "<A href='?_src_=holder;[HrefToken()];languagemenu=[REF(M)]'>Language Menu</A>"
//ambition start
if(M.mind)
body += " | <A href='?_src_=holder;[HrefToken()];ObjectiveRequest=[REF(M.mind)]'>Objective-Ambition Menu</A>"
//ambition end
if (M.client)
if(!isnewplayer(M))
@@ -206,7 +212,11 @@
body += "<br>"
body += "</body></html>"
usr << browse(body, "window=adminplayeropts-[REF(M)];size=550x515")
//ambition start
var/datum/browser/popup = new(usr, "adminplayeropts-[REF(M)]", "Player Panel", nwidth = 550, nheight = 515)
popup.set_content(body.Join())
popup.open()
//ambition end
SSblackbox.record_feedback("tally", "admin_verb", 1, "Player Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+12
View File
@@ -2031,6 +2031,18 @@
var/mob/M = locate(href_list["HeadsetMessage"])
usr.client.admin_headset_message(M)
//ambition start
else if(href_list["ObjectiveRequest"])
if(!check_rights(R_ADMIN))
return
var/datum/mind/requesting_mind = locate(href_list["ObjectiveRequest"])
if(!istype(requesting_mind) || QDELETED(requesting_mind))
to_chat(usr, "<span class='warning'>This mind reference is no longer valid. It has probably since been destroyed.</span>")
return
requesting_mind.do_edit_objectives_ambitions()
return
//ambition end
else if(href_list["reject_custom_name"])
if(!check_rights(R_ADMIN))
@@ -25,6 +25,10 @@ GLOBAL_LIST_EMPTY(antagonists)
var/show_name_in_check_antagonists = FALSE //Will append antagonist name in admin listings - use for categories that share more than one antag type
var/list/blacklisted_quirks = list(/datum/quirk/nonviolent,/datum/quirk/mute) // Quirks that will be removed upon gaining this antag. Pacifist and mute are default.
var/threat = 0 // Amount of threat this antag poses, for dynamic mode
//ambition start
/// Lazy list for antagonists to request the admins objectives.
var/list/requested_objective_changes
//ambition end
var/show_to_ghosts = FALSE // Should this antagonist be shown as antag to ghosts? Shouldn't be used for stealthy antagonists like traitors
var/list/skill_modifiers
@@ -35,8 +39,9 @@ GLOBAL_LIST_EMPTY(antagonists)
/datum/antagonist/Destroy()
GLOB.antagonists -= src
if(owner)
LAZYREMOVE(owner.antag_datums, src)
//ambition start
owner?.do_remove_antag_datum(src)
//ambition end
owner = null
return ..()
@@ -146,7 +151,9 @@ GLOBAL_LIST_EMPTY(antagonists)
remove_innate_effects()
clear_antag_moodies()
if(owner)
LAZYREMOVE(owner.antag_datums, src)
//ambition start
owner.do_remove_antag_datum(src)
//ambition end
for(var/A in skill_modifiers)
owner.remove_skill_modifier(GET_SKILL_MOD_ID(A, type))
if(!LAZYLEN(owner.antag_datums))
@@ -308,3 +315,33 @@ GLOBAL_LIST_EMPTY(antagonists)
else
return
..()
///Clears change requests from deleted objectives to avoid broken references.
/datum/antagonist/proc/clean_request_from_del_objective(datum/objective/source, force)
var/objective_reference = REF(source)
for(var/uid in requested_objective_changes)
var/list/change_request = requested_objective_changes[uid]
if(change_request["target"] != objective_reference)
continue
LAZYREMOVE(requested_objective_changes, uid)
/datum/antagonist/proc/add_objective_change(uid, list/additions)
LAZYADD(requested_objective_changes, uid)
var/datum/objective/request_target = additions["target"]
if(!ispath(request_target))
request_target = locate(request_target) in objectives
if(istype(request_target))
RegisterSignal(request_target, COMSIG_PARENT_QDELETING, .proc/clean_request_from_del_objective)
requested_objective_changes[uid] = additions
/datum/antagonist/proc/remove_objective_change(uid)
if(!LAZYACCESS(requested_objective_changes, uid))
return
var/datum/objective/request_target = requested_objective_changes[uid]["target"]
if(!ispath(request_target))
request_target = locate(request_target) in objectives
if(istype(request_target))
UnregisterSignal(request_target, COMSIG_PARENT_QDELETING)
LAZYREMOVE(requested_objective_changes, uid)
@@ -65,7 +65,9 @@
user.copy_languages(target, LANGUAGE_ABSORB)
if(target.mind && user.mind)//if the victim and user have minds
target.mind.show_memory(user, 0) //I can read your mind, kekeke. Output all their notes.
//ambition start
to_chat(user, "<i>[target.mind.show_memory()]</i>") //I can read your mind, kekeke. Output all their notes.
//ambition end
//Some of target's recent speech, so the changeling can attempt to imitate them better.
//Recent as opposed to all because rounds tend to have a LOT of text.
+4 -1
View File
@@ -49,7 +49,10 @@
cult_team = new_team
/datum/antagonist/cult/proc/add_objectives()
objectives |= cult_team?.objectives
//ambition start
if(cult_team)
objectives |= cult_team.objectives
//ambition end
/datum/antagonist/cult/Destroy()
QDEL_NULL(communion)
+4 -1
View File
@@ -2,7 +2,10 @@
..()
//Mind updates
sync_mind()
mind.show_memory(src, 0)
//ambition start
if(mind.memory || mind.antag_datums)
to_chat(src, "<i>[mind.show_memory()]</i>")
//ambition end
//Round specific stuff
if(SSticker.mode)
+5 -1
View File
@@ -440,7 +440,11 @@
set category = "IC"
set desc = "View your character's notes memory."
if(mind)
mind.show_memory(src)
//ambition start
var/datum/browser/popup = new(src, "memory", "Memory and Notes")
popup.set_content(mind.show_memory())
popup.open()
//ambition end
else
to_chat(src, "You don't have a mind datum for some reason, so you can't look at your notes, if you had any.")