Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add: auto dnr after death preference #6629

Draft
wants to merge 11 commits into
base: master220
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions code/__DEFINES/preferences.dm
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#define PREFTOGGLE_AMBIENT_OCCLUSION (1<<21)
#define PREFTOGGLE_CHAT_GHOSTPDA (1<<22)
// #define PREFTOGGLE_NUMPAD_TARGET 8388608 // Made obsolete with key bindings
#define PREFTOGGLE_DNR_AFTER_DEATH (1<<23) // 8388608

#define TOGGLES_TOTAL 16777215 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined.

Expand Down
9 changes: 5 additions & 4 deletions code/__HELPERS/global_lists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,11 @@
init_keybindings()

// Preference toggles
for(var/path in subtypesof(/datum/preference_toggle))
var/datum/preference_toggle/pref_toggle = path
if(initial(pref_toggle.name))
GLOB.preference_toggles += new path()
for(var/datum/preference_toggle/pref_toggle as anything in subtypesof(/datum/preference_toggle))
if(!pref_toggle.name)
continue

GLOB.preference_toggles[pref_toggle] = new pref_toggle()

// Init chemical reagents
init_datum_subtypes(/datum/reagent, GLOB.chemical_reagents_list, null, "id")
Expand Down
15 changes: 11 additions & 4 deletions code/datums/components/pref_holder.dm
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@
return ..()

/datum/component/pref_holder/Initialize(list/preferences)
var/mob/target = parent

if(!istype(target))
if(!ismob(parent))
return COMPONENT_INCOMPATIBLE

src.preferences = preferences || forge_preferences()
Expand All @@ -18,7 +16,10 @@
RegisterSignal(parent, COMSIG_MOB_LOGIN, PROC_REF(handle_transfer))

/datum/component/pref_holder/UnregisterFromParent()
UnregisterSignal(parent, COMSIG_MOB_LOGIN)
UnregisterSignal(parent, COMSIG_MOB_LOGIN)

for(var/datum/preference_info/pref as anything in preferences)
pref.deactivate(parent)

/datum/component/pref_holder/proc/handle_transfer(mob/source)
SIGNAL_HANDLER
Expand All @@ -30,6 +31,9 @@

if(!mob.client)
return

for(var/datum/preference_info/pref as anything in preferences) // deactivate current
pref.deactivate(parent)

var/list/prefs

Expand All @@ -44,6 +48,9 @@
)
continue

if(!pref.activate(parent))
continue

LAZYADD(prefs, new pref.type)

return prefs
108 changes: 67 additions & 41 deletions code/modules/client/preference/preference_info.dm
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ GLOBAL_LIST_INIT(preferences_info, list())
/datum/preference_info/proc/get_examine_text()
return

/datum/preference_info/proc/activate(mob/target)
return TRUE

/datum/preference_info/proc/deactivate(mob/target)
return

/datum/preference_info/ghost_ears
name = "Hearing All Speech as a Ghost"

Expand Down Expand Up @@ -129,125 +135,145 @@ GLOBAL_LIST_INIT(preferences_info, list())
/datum/preference_info/take_out_of_the_round_without_obj
name = "Take out from round without objective"

/datum/preference_info/auto_dnr
name = "Do Not Revive status after death"

/datum/preference_info/deadchat_visibility/get_preference_toggle()
return new /datum/preference_toggle/toggle_deadchat_visibility
return GLOB.preference_toggles[/datum/preference_toggle/toggle_deadchat_visibility]

/datum/preference_info/ghost_ears/get_preference_toggle()
return new /datum/preference_toggle/toggle_ghost_ears
return GLOB.preference_toggles[/datum/preference_toggle/toggle_ghost_ears]

/datum/preference_info/ghost_sight/get_preference_toggle()
return new /datum/preference_toggle/toggle_ghost_sight
return GLOB.preference_toggles[/datum/preference_toggle/toggle_ghost_sight]

/datum/preference_info/ghost_radio/get_preference_toggle()
return new /datum/preference_toggle/toggle_ghost_radio
return GLOB.preference_toggles[/datum/preference_toggle/toggle_ghost_radio]

/datum/preference_info/admin_radio/get_preference_toggle()
return new /datum/preference_toggle/toggle_admin_radio
return GLOB.preference_toggles[/datum/preference_toggle/toggle_admin_radio]

/datum/preference_info/ai_voice_announcements/get_preference_toggle()
return new /datum/preference_toggle/toggle_ai_voice_annoucements
return GLOB.preference_toggles[/datum/preference_toggle/toggle_ai_voice_annoucements]

/datum/preference_info/admin_pm_sound/get_preference_toggle()
return new /datum/preference_toggle/toggle_admin_pm_sound
return GLOB.preference_toggles[/datum/preference_toggle/toggle_admin_pm_sound]

/datum/preference_info/mentor_pm_sound/get_preference_toggle()
return new /datum/preference_toggle/toggle_mentor_pm_sound
return GLOB.preference_toggles[/datum/preference_toggle/toggle_mentor_pm_sound]

/datum/preference_info/end_of_round_scoreboard/get_preference_toggle()
return new /datum/preference_toggle/end_of_round_scoreboard
return GLOB.preference_toggles[/datum/preference_toggle/end_of_round_scoreboard]

/datum/preference_info/title_music/get_preference_toggle()
return new /datum/preference_toggle/title_music
return GLOB.preference_toggles[/datum/preference_toggle/title_music]

/datum/preference_info/admin_midis/get_preference_toggle()
return new /datum/preference_toggle/toggle_admin_midis
return GLOB.preference_toggles[/datum/preference_toggle/toggle_admin_midis]

/datum/preference_info/ooc/get_preference_toggle()
return new /datum/preference_toggle/toggle_ooc
return GLOB.preference_toggles[/datum/preference_toggle/toggle_ooc]

/datum/preference_info/looc/get_preference_toggle()
return new /datum/preference_toggle/toggle_looc
return GLOB.preference_toggles[/datum/preference_toggle/toggle_looc]

/datum/preference_info/ambience/get_preference_toggle()
return new /datum/preference_toggle/toggle_ambience
return GLOB.preference_toggles[/datum/preference_toggle/toggle_ambience]

/datum/preference_info/white_noise/get_preference_toggle()
return new /datum/preference_toggle/toggle_white_noise
return GLOB.preference_toggles[/datum/preference_toggle/toggle_white_noise]

/datum/preference_info/heartbeat_noise/get_preference_toggle()
return new /datum/preference_toggle/toggle_heartbeat_noise
return GLOB.preference_toggles[/datum/preference_toggle/toggle_heartbeat_noise]

/datum/preference_info/instruments/get_preference_toggle()
return new /datum/preference_toggle/toggle_instruments
return GLOB.preference_toggles[/datum/preference_toggle/toggle_instruments]

/datum/preference_info/disco/get_preference_toggle()
return new /datum/preference_toggle/toggle_disco
return GLOB.preference_toggles[/datum/preference_toggle/toggle_disco]

/datum/preference_info/ghost_pda/get_preference_toggle()
return new /datum/preference_toggle/toggle_ghost_pda
return GLOB.preference_toggles[/datum/preference_toggle/toggle_ghost_pda]

/datum/preference_info/runechat/get_preference_toggle()
return new /datum/preference_toggle/toggle_runechat
return GLOB.preference_toggles[/datum/preference_toggle/toggle_runechat]

/datum/preference_info/ghost_death_notifs/get_preference_toggle()
return new /datum/preference_toggle/toggle_ghost_death_notifs
return GLOB.preference_toggles[/datum/preference_toggle/toggle_ghost_death_notifs]

/datum/preference_info/reverb/get_preference_toggle()
return new /datum/preference_toggle/toggle_reverb
return GLOB.preference_toggles[/datum/preference_toggle/toggle_reverb]

/datum/preference_info/simple_stat_panel/get_preference_toggle()
return new /datum/preference_toggle/toggle_simple_stat_panel
return GLOB.preference_toggles[/datum/preference_toggle/toggle_simple_stat_panel]

/datum/preference_info/anonmode/get_preference_toggle()
return new /datum/preference_toggle/toggle_anonmode
return GLOB.preference_toggles[/datum/preference_toggle/toggle_anonmode]

/datum/preference_info/typing_indicator/get_preference_toggle()
return new /datum/preference_toggle/toggle_typing_indicator
return GLOB.preference_toggles[/datum/preference_toggle/toggle_typing_indicator]

/datum/preference_info/admin_logs/get_preference_toggle()
return new /datum/preference_toggle/toggle_admin_logs
return GLOB.preference_toggles[/datum/preference_toggle/toggle_admin_logs]

/datum/preference_info/mhelp_notification/get_preference_toggle()
return new /datum/preference_toggle/toggle_mhelp_notification
return GLOB.preference_toggles[/datum/preference_toggle/toggle_mhelp_notification]

/datum/preference_info/ahelp_notification/get_preference_toggle()
return new /datum/preference_toggle/toggle_ahelp_notification
return GLOB.preference_toggles[/datum/preference_toggle/toggle_ahelp_notification]

/datum/preference_info/debug_logs/get_preference_toggle()
return new /datum/preference_toggle/toggle_debug_logs
return GLOB.preference_toggles[/datum/preference_toggle/toggle_debug_logs]

/datum/preference_info/mctabs/get_preference_toggle()
return new /datum/preference_toggle/toggle_mctabs
return GLOB.preference_toggles[/datum/preference_toggle/toggle_mctabs]

/datum/preference_info/attack_animations/get_preference_toggle()
return new /datum/preference_toggle/toggle_attack_animations
return GLOB.preference_toggles[/datum/preference_toggle/toggle_attack_animations]

/datum/preference_info/prayers/get_preference_toggle()
return new /datum/preference_toggle/toggleprayers
return GLOB.preference_toggles[/datum/preference_toggle/toggleprayers]

/datum/preference_info/prayers_notify/get_preference_toggle()
return new /datum/preference_toggle/toggle_prayers_notify
return GLOB.preference_toggles[/datum/preference_toggle/toggle_prayers_notify]

/datum/preference_info/karma_reminder/get_preference_toggle()
return new /datum/preference_toggle/toggle_karma_reminder
return GLOB.preference_toggles[/datum/preference_toggle/toggle_karma_reminder]

/datum/preference_info/parallax_multiz/get_preference_toggle()
return new /datum/preference_toggle/toggle_parallax_multiz
return GLOB.preference_toggles[/datum/preference_toggle/toggle_parallax_multiz]

/datum/preference_info/vote_popup/get_preference_toggle()
return new /datum/preference_toggle/toggle_vote_popup
return GLOB.preference_toggles[/datum/preference_toggle/toggle_vote_popup]

/datum/preference_info/tgui_input/get_preference_toggle()
return new /datum/preference_toggle/toggle_tgui_input
return GLOB.preference_toggles[/datum/preference_toggle/toggle_tgui_input]

/datum/preference_info/strip_tgui_size/get_preference_toggle()
return new /datum/preference_toggle/toggle_strip_tgui_size
return GLOB.preference_toggles[/datum/preference_toggle/toggle_strip_tgui_size]

/datum/preference_info/item_descritpion_tips/get_preference_toggle()
return new /datum/preference_toggle/toggle_item_descritpion_tips
/datum/preference_info/item_description_tips/get_preference_toggle()
return GLOB.preference_toggles[/datum/preference_toggle/toggle_item_description_tips]

/datum/preference_info/take_out_of_the_round_without_obj/get_preference_toggle()
return new /datum/preference_toggle/toggle_take_out_of_the_round_without_obj
return GLOB.preference_toggles[/datum/preference_toggle/toggle_take_out_of_the_round_without_obj]

/datum/preference_info/auto_dnr/get_preference_toggle()
return GLOB.preference_toggles[/datum/preference_toggle/toggle_auto_dnr]

/datum/preference_info/take_out_of_the_round_without_obj/get_examine_text()
return "\n<div class='examine'>[span_info("Вы можете вывести этого игрока из игры не имея соответствующей цели.")]</div>"

/datum/preference_info/auto_dnr/activate(mob/target)
RegisterSignal(target, COMSIG_MOB_DEATH, PROC_REF(set_dnr_status))

return TRUE

/datum/preference_info/auto_dnr/deactivate(mob/target)
UnregisterSignal(target, COMSIG_MOB_DEATH)

/datum/preference_info/auto_dnr/proc/set_dnr_status(mob/source, gibbed)
SIGNAL_HANDLER

var/mob/dead/observer/ghost = source.ghostize(NONE)
ghost.apply_dnr(TRUE) // we prevented re-entering earlier, but we need to update hud and send signal
4 changes: 3 additions & 1 deletion code/modules/client/preference/preferences.dm
Original file line number Diff line number Diff line change
Expand Up @@ -713,7 +713,9 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
var/static/list/pref_toggles_by_category
if(!pref_toggles_by_category)
pref_toggles_by_category = list()
for(var/datum/preference_toggle/toggle as anything in GLOB.preference_toggles)

for(var/path in GLOB.preference_toggles)
var/datum/preference_toggle/toggle = GLOB.preference_toggles[path]
pref_toggles_by_category["[toggle.preftoggle_category]"] += list(toggle)

for(var/category in GLOB.preference_toggle_groups)
Expand Down
11 changes: 10 additions & 1 deletion code/modules/client/preference/preferences_toggles.dm
Original file line number Diff line number Diff line change
Expand Up @@ -592,7 +592,7 @@
disable_message = "You will see minuature TGUI strip menu."
blackbox_message = "Toggle TGUI strip menu size"

/datum/preference_toggle/toggle_item_descritpion_tips
/datum/preference_toggle/toggle_item_description_tips
name = "Toggle item description tips"
description = "Toggles item description tips on hover."
preftoggle_bitflag = PREFTOGGLE_2_DESC_TIPS
Expand Down Expand Up @@ -622,3 +622,12 @@
disable_message = "Теперь вы будете видить сообщения, появляющиеся при стрельбе."
blackbox_message = "Переключение комбат логов от выстрелов"

/datum/preference_toggle/toggle_auto_dnr
name = "DNR при смерти"
description = "При смерти автоматически включается статус DNR."
preftoggle_bitflag = PREFTOGGLE_DNR_AFTER_DEATH
preftoggle_toggle = PREFTOGGLE_TOGGLE1
preftoggle_category = PREFTOGGLE_CATEGORY_GENERAL
enable_message = "Смерть вашего персонажа теперь перманентная."
disable_message = "Смерть персонажа более не перманентная."
blackbox_message = "Переключение установки статуса DNR после смерти"
26 changes: 18 additions & 8 deletions code/modules/mob/dead/observer/observer.dm
Original file line number Diff line number Diff line change
Expand Up @@ -390,22 +390,32 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp

if(!isobserver(src)) // Somehow
return

if(!can_reenter_corpse)
to_chat(src, "<span class='warning'>У вас уже стоит DNR!</span>")
to_chat(src, span_warning("У вас уже стоит DNR!"))
return

if(!mind || QDELETED(mind.current))
to_chat(src, "<span class='warning'>У вас нету тела.</span>")
to_chat(src, span_warning("У вас нету тела."))
return

if(mind.current.stat != DEAD)
to_chat(src, "<span class='warning'>Твое тело все ещё живо!</span>")
to_chat(src, span_warning("Твое тело все ещё живо!"))
return

if(tgui_alert(src, "Если вы включите это, ваше тело не смогут больше возродить до конца раунда.", "Вы уверены?", list("Да", "Нет")) == "Да")
to_chat(src, "<span class='boldnotice'>Do Not Revive статус включён.</span>")
can_reenter_corpse = FALSE
if(!QDELETED(mind.current)) // Could change while they're choosing
mind.current.med_hud_set_status()
SEND_SIGNAL(mind.current, COMSIG_LIVING_SET_DNR)
apply_dnr()

/mob/dead/observer/proc/apply_dnr(silent = FALSE)
if(!silent)
to_chat(src, span_boldnotice("Do Not Revive статус включён."))

can_reenter_corpse = FALSE

if(!QDELETED(mind.current)) // Could change while they're choosing
mind.current.med_hud_set_status()

SEND_SIGNAL(mind.current, COMSIG_LIVING_SET_DNR)

/mob/dead/observer/proc/dead_tele()
set category = "Ghost"
Expand Down