From 6bdbd1e0f14649bf60fba12694c5b00dec905f3d Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 28 Feb 2021 19:09:56 -0500 Subject: [PATCH] Fixes something that was overlooked --- .../client}/verbs/advanced_who.dm | 0 .../client}/verbs/character_directory.dm | 0 code/{game => modules/client}/verbs/ignore.dm | 0 code/{game => modules/client}/verbs/ooc.dm | 386 ++++++++-------- .../{game => modules/client}/verbs/suicide.dm | 336 +++++++------- code/{game => modules/client}/verbs/who.dm | 416 +++++++++--------- vorestation.dme | 13 +- 7 files changed, 576 insertions(+), 575 deletions(-) rename code/{game => modules/client}/verbs/advanced_who.dm (100%) rename code/{game => modules/client}/verbs/character_directory.dm (100%) rename code/{game => modules/client}/verbs/ignore.dm (100%) rename code/{game => modules/client}/verbs/ooc.dm (97%) rename code/{game => modules/client}/verbs/suicide.dm (97%) rename code/{game => modules/client}/verbs/who.dm (96%) diff --git a/code/game/verbs/advanced_who.dm b/code/modules/client/verbs/advanced_who.dm similarity index 100% rename from code/game/verbs/advanced_who.dm rename to code/modules/client/verbs/advanced_who.dm diff --git a/code/game/verbs/character_directory.dm b/code/modules/client/verbs/character_directory.dm similarity index 100% rename from code/game/verbs/character_directory.dm rename to code/modules/client/verbs/character_directory.dm diff --git a/code/game/verbs/ignore.dm b/code/modules/client/verbs/ignore.dm similarity index 100% rename from code/game/verbs/ignore.dm rename to code/modules/client/verbs/ignore.dm diff --git a/code/game/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm similarity index 97% rename from code/game/verbs/ooc.dm rename to code/modules/client/verbs/ooc.dm index 1afb52566cf..7019d705282 100644 --- a/code/game/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -1,193 +1,193 @@ - -/client/verb/ooc(msg as text) - set name = "OOC" - set category = "OOC" - - if(say_disabled) //This is here to try to identify lag problems - to_chat(usr, "Speech is currently admin-disabled.") - return - - if(!mob) return - if(IsGuestKey(key)) - to_chat(src, "Guests may not use OOC.") - return - - msg = sanitize(msg) - if(!msg) return - - if(!is_preference_enabled(/datum/client_preference/show_ooc)) - to_chat(src, "You have OOC muted.") - return - - if(!holder) - if(!config.ooc_allowed) - to_chat(src, "OOC is globally muted.") - return - if(!config.dooc_allowed && (mob.stat == DEAD)) - to_chat(usr, "OOC for dead mobs has been turned off.") - return - if(prefs.muted & MUTE_OOC) - to_chat(src, "You cannot use OOC (muted).") - return - if(findtext(msg, "byond://") && !config.allow_byond_links) - to_chat(src, "Advertising other servers is not allowed.") - log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]") - message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]") - return - if(findtext(msg, "discord.gg") && !config.allow_discord_links) - to_chat(src, "Advertising discords is not allowed.") - log_admin("[key_name(src)] has attempted to advertise a discord server in OOC: [msg]") - message_admins("[key_name_admin(src)] has attempted to advertise a discord server in OOC: [msg]") - return - if((findtext(msg, "http://") || findtext(msg, "https://")) && !config.allow_url_links) - to_chat(src, "Posting external links is not allowed.") - log_admin("[key_name(src)] has attempted to post a link in OOC: [msg]") - message_admins("[key_name_admin(src)] has attempted to post a link in OOC: [msg]") - return - - log_ooc(msg, src) - - if(msg) - handle_spam_prevention(MUTE_OOC) - - var/ooc_style = "everyone" - if(holder && !holder.fakekey) - ooc_style = "elevated" - //VOREStation Block Edit Start - if(holder.rights & R_EVENT) //Retired Admins - ooc_style = "event_manager" - if(holder.rights & R_ADMIN && !(holder.rights & R_BAN)) //Game Masters - ooc_style = "moderator" - if(holder.rights & R_SERVER && !(holder.rights & R_BAN)) //Developers - ooc_style = "developer" - if(holder.rights & R_ADMIN && holder.rights & R_BAN) //Admins - ooc_style = "admin" - //VOREStation Block Edit End - - for(var/client/target in GLOB.clients) - if(target.is_preference_enabled(/datum/client_preference/show_ooc)) - if(target.is_key_ignored(key)) // If we're ignored by this person, then do nothing. - continue - var/display_name = src.key - if(holder) - if(holder.fakekey) - if(target.holder) - display_name = "[holder.fakekey]/([src.key])" - else - display_name = holder.fakekey - if(holder && !holder.fakekey && (holder.rights & R_ADMIN|R_FUN|R_EVENT) && config.allow_admin_ooccolor && (src.prefs.ooccolor != initial(src.prefs.ooccolor))) // keeping this for the badmins - to_chat(target, "" + create_text_tag("ooc", "OOC:", target) + " [display_name]: [msg]") - else - to_chat(target, "" + create_text_tag("ooc", "OOC:", target) + " [display_name]: [msg]") - -/client/verb/looc(msg as text) - set name = "LOOC" - set desc = "Local OOC, seen only by those in view." - set category = "OOC" - - if(say_disabled) //This is here to try to identify lag problems - to_chat(usr, "Speech is currently admin-disabled.") - return - - if(!mob) - return - - if(IsGuestKey(key)) - to_chat(src, "Guests may not use OOC.") - return - - msg = sanitize(msg) - if(!msg) - return - - if(!is_preference_enabled(/datum/client_preference/show_looc)) - to_chat(src, "You have LOOC muted.") - return - - if(!holder) - if(!config.looc_allowed) - to_chat(src, "LOOC is globally muted.") - return - if(!config.dooc_allowed && (mob.stat == DEAD)) - to_chat(usr, "OOC for dead mobs has been turned off.") - return - if(prefs.muted & MUTE_OOC) - to_chat(src, "You cannot use OOC (muted).") - return - if(findtext(msg, "byond://") && !config.allow_byond_links) - to_chat(src, "Advertising other servers is not allowed.") - log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]") - message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]") - return - if(findtext(msg, "discord.gg") && !config.allow_discord_links) - to_chat(src, "Advertising discords is not allowed.") - log_admin("[key_name(src)] has attempted to advertise a discord server in OOC: [msg]") - message_admins("[key_name_admin(src)] has attempted to advertise a discord server in OOC: [msg]") - return - if((findtext(msg, "http://") || findtext(msg, "https://")) && !config.allow_url_links) - to_chat(src, "Posting external links is not allowed.") - log_admin("[key_name(src)] has attempted to post a link in OOC: [msg]") - message_admins("[key_name_admin(src)] has attempted to post a link in OOC: [msg]") - return - - log_looc(msg,src) - - if(msg) - handle_spam_prevention(MUTE_OOC) - - var/mob/source = mob.get_looc_source() - var/turf/T = get_turf(source) - if(!T) return - var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0) - var/list/m_viewers = in_range["mobs"] - - var/list/receivers = list() //Clients, not mobs. - var/list/r_receivers = list() - - var/display_name = key - if(holder && holder.fakekey) - display_name = holder.fakekey - if(mob.stat != DEAD) - display_name = mob.name - //VOREStation Add - Resleeving shenanigan prevention - if(ishuman(mob)) - var/mob/living/carbon/human/H = mob - if(H.original_player && H.original_player != H.ckey) //In a body not their own - display_name = "[H.mind.name] (as [H.name])" - //VOREStation Add End - - // Everyone in normal viewing range of the LOOC - for(var/mob/viewer in m_viewers) - if(viewer.client && viewer.client.is_preference_enabled(/datum/client_preference/show_looc)) - receivers |= viewer.client - else if(istype(viewer,/mob/observer/eye)) // For AI eyes and the like - var/mob/observer/eye/E = viewer - if(E.owner && E.owner.client) - receivers |= E.owner.client - - // Admins with RLOOC displayed who weren't already in - for(var/client/admin in GLOB.admins) - if(!(admin in receivers) && admin.is_preference_enabled(/datum/client_preference/holder/show_rlooc)) - r_receivers |= admin - - // Send a message - for(var/client/target in receivers) - var/admin_stuff = "" - - if(target in GLOB.admins) - admin_stuff += "/([key])" - - to_chat(target, "" + create_text_tag("looc", "LOOC:", target) + " [display_name][admin_stuff]: [msg]") - - for(var/client/target in r_receivers) - var/admin_stuff = "/([key])([admin_jump_link(mob, target.holder)])" - - to_chat(target, "" + create_text_tag("looc", "LOOC:", target) + " (R)[display_name][admin_stuff]: [msg]") - -/mob/proc/get_looc_source() - return src - -/mob/living/silicon/ai/get_looc_source() - if(eyeobj) - return eyeobj - return src + +/client/verb/ooc(msg as text) + set name = "OOC" + set category = "OOC" + + if(say_disabled) //This is here to try to identify lag problems + to_chat(usr, "Speech is currently admin-disabled.") + return + + if(!mob) return + if(IsGuestKey(key)) + to_chat(src, "Guests may not use OOC.") + return + + msg = sanitize(msg) + if(!msg) return + + if(!is_preference_enabled(/datum/client_preference/show_ooc)) + to_chat(src, "You have OOC muted.") + return + + if(!holder) + if(!config.ooc_allowed) + to_chat(src, "OOC is globally muted.") + return + if(!config.dooc_allowed && (mob.stat == DEAD)) + to_chat(usr, "OOC for dead mobs has been turned off.") + return + if(prefs.muted & MUTE_OOC) + to_chat(src, "You cannot use OOC (muted).") + return + if(findtext(msg, "byond://") && !config.allow_byond_links) + to_chat(src, "Advertising other servers is not allowed.") + log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]") + message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]") + return + if(findtext(msg, "discord.gg") && !config.allow_discord_links) + to_chat(src, "Advertising discords is not allowed.") + log_admin("[key_name(src)] has attempted to advertise a discord server in OOC: [msg]") + message_admins("[key_name_admin(src)] has attempted to advertise a discord server in OOC: [msg]") + return + if((findtext(msg, "http://") || findtext(msg, "https://")) && !config.allow_url_links) + to_chat(src, "Posting external links is not allowed.") + log_admin("[key_name(src)] has attempted to post a link in OOC: [msg]") + message_admins("[key_name_admin(src)] has attempted to post a link in OOC: [msg]") + return + + log_ooc(msg, src) + + if(msg) + handle_spam_prevention(MUTE_OOC) + + var/ooc_style = "everyone" + if(holder && !holder.fakekey) + ooc_style = "elevated" + //VOREStation Block Edit Start + if(holder.rights & R_EVENT) //Retired Admins + ooc_style = "event_manager" + if(holder.rights & R_ADMIN && !(holder.rights & R_BAN)) //Game Masters + ooc_style = "moderator" + if(holder.rights & R_SERVER && !(holder.rights & R_BAN)) //Developers + ooc_style = "developer" + if(holder.rights & R_ADMIN && holder.rights & R_BAN) //Admins + ooc_style = "admin" + //VOREStation Block Edit End + + for(var/client/target in GLOB.clients) + if(target.is_preference_enabled(/datum/client_preference/show_ooc)) + if(target.is_key_ignored(key)) // If we're ignored by this person, then do nothing. + continue + var/display_name = src.key + if(holder) + if(holder.fakekey) + if(target.holder) + display_name = "[holder.fakekey]/([src.key])" + else + display_name = holder.fakekey + if(holder && !holder.fakekey && (holder.rights & R_ADMIN|R_FUN|R_EVENT) && config.allow_admin_ooccolor && (src.prefs.ooccolor != initial(src.prefs.ooccolor))) // keeping this for the badmins + to_chat(target, "" + create_text_tag("ooc", "OOC:", target) + " [display_name]: [msg]") + else + to_chat(target, "" + create_text_tag("ooc", "OOC:", target) + " [display_name]: [msg]") + +/client/verb/looc(msg as text) + set name = "LOOC" + set desc = "Local OOC, seen only by those in view." + set category = "OOC" + + if(say_disabled) //This is here to try to identify lag problems + to_chat(usr, "Speech is currently admin-disabled.") + return + + if(!mob) + return + + if(IsGuestKey(key)) + to_chat(src, "Guests may not use OOC.") + return + + msg = sanitize(msg) + if(!msg) + return + + if(!is_preference_enabled(/datum/client_preference/show_looc)) + to_chat(src, "You have LOOC muted.") + return + + if(!holder) + if(!config.looc_allowed) + to_chat(src, "LOOC is globally muted.") + return + if(!config.dooc_allowed && (mob.stat == DEAD)) + to_chat(usr, "OOC for dead mobs has been turned off.") + return + if(prefs.muted & MUTE_OOC) + to_chat(src, "You cannot use OOC (muted).") + return + if(findtext(msg, "byond://") && !config.allow_byond_links) + to_chat(src, "Advertising other servers is not allowed.") + log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]") + message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]") + return + if(findtext(msg, "discord.gg") && !config.allow_discord_links) + to_chat(src, "Advertising discords is not allowed.") + log_admin("[key_name(src)] has attempted to advertise a discord server in OOC: [msg]") + message_admins("[key_name_admin(src)] has attempted to advertise a discord server in OOC: [msg]") + return + if((findtext(msg, "http://") || findtext(msg, "https://")) && !config.allow_url_links) + to_chat(src, "Posting external links is not allowed.") + log_admin("[key_name(src)] has attempted to post a link in OOC: [msg]") + message_admins("[key_name_admin(src)] has attempted to post a link in OOC: [msg]") + return + + log_looc(msg,src) + + if(msg) + handle_spam_prevention(MUTE_OOC) + + var/mob/source = mob.get_looc_source() + var/turf/T = get_turf(source) + if(!T) return + var/list/in_range = get_mobs_and_objs_in_view_fast(T,world.view,0) + var/list/m_viewers = in_range["mobs"] + + var/list/receivers = list() //Clients, not mobs. + var/list/r_receivers = list() + + var/display_name = key + if(holder && holder.fakekey) + display_name = holder.fakekey + if(mob.stat != DEAD) + display_name = mob.name + //VOREStation Add - Resleeving shenanigan prevention + if(ishuman(mob)) + var/mob/living/carbon/human/H = mob + if(H.original_player && H.original_player != H.ckey) //In a body not their own + display_name = "[H.mind.name] (as [H.name])" + //VOREStation Add End + + // Everyone in normal viewing range of the LOOC + for(var/mob/viewer in m_viewers) + if(viewer.client && viewer.client.is_preference_enabled(/datum/client_preference/show_looc)) + receivers |= viewer.client + else if(istype(viewer,/mob/observer/eye)) // For AI eyes and the like + var/mob/observer/eye/E = viewer + if(E.owner && E.owner.client) + receivers |= E.owner.client + + // Admins with RLOOC displayed who weren't already in + for(var/client/admin in GLOB.admins) + if(!(admin in receivers) && admin.is_preference_enabled(/datum/client_preference/holder/show_rlooc)) + r_receivers |= admin + + // Send a message + for(var/client/target in receivers) + var/admin_stuff = "" + + if(target in GLOB.admins) + admin_stuff += "/([key])" + + to_chat(target, "" + create_text_tag("looc", "LOOC:", target) + " [display_name][admin_stuff]: [msg]") + + for(var/client/target in r_receivers) + var/admin_stuff = "/([key])([admin_jump_link(mob, target.holder)])" + + to_chat(target, "" + create_text_tag("looc", "LOOC:", target) + " (R)[display_name][admin_stuff]: [msg]") + +/mob/proc/get_looc_source() + return src + +/mob/living/silicon/ai/get_looc_source() + if(eyeobj) + return eyeobj + return src diff --git a/code/game/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm similarity index 97% rename from code/game/verbs/suicide.dm rename to code/modules/client/verbs/suicide.dm index ce0b82df9bb..314816c59fe 100644 --- a/code/game/verbs/suicide.dm +++ b/code/modules/client/verbs/suicide.dm @@ -1,168 +1,168 @@ -/mob/var/suiciding = 0 - -/mob/living/carbon/human/verb/suicide() - set hidden = 1 - - if (stat == DEAD) - to_chat(src, "You're already dead!") - return - - if (!ticker) - to_chat(src, "You can't commit suicide before the game starts!") - return - - if(!player_is_antag(mind)) - message_admins("[ckey] has tried to suicide, but they were not permitted due to not being antagonist as human.", 1) - to_chat(src, "No. Adminhelp if there is a legitimate reason.") - return - - if (suiciding) - to_chat(src, "You're already committing suicide! Be patient!") - return - - var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") - - if(confirm == "Yes") - if(!canmove || restrained()) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide - to_chat(src, "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))") - return - suiciding = 15 - does_not_breathe = 0 //Prevents ling-suicide zombies, or something - var/obj/item/held_item = get_active_hand() - if(held_item) - var/damagetype = held_item.suicide_act(src) - if(damagetype) - log_and_message_admins("[key_name(src)] commited suicide using \a [held_item]") - var/damage_mod = 1 - switch(damagetype) //Sorry about the magic numbers. - //brute = 1, burn = 2, tox = 4, oxy = 8 - if(15) //4 damage types - damage_mod = 4 - - if(6, 11, 13, 14) //3 damage types - damage_mod = 3 - - if(3, 5, 7, 9, 10, 12) //2 damage types - damage_mod = 2 - - if(1, 2, 4, 8) //1 damage type - damage_mod = 1 - - else //This should not happen, but if it does, everything should still work - damage_mod = 1 - - //Do 175 damage divided by the number of damage types applied. - if(damagetype & BRUTELOSS) - adjustBruteLoss(30/damage_mod) //hack to prevent gibbing - adjustOxyLoss(145/damage_mod) - - if(damagetype & FIRELOSS) - adjustFireLoss(175/damage_mod) - - if(damagetype & TOXLOSS) - adjustToxLoss(175/damage_mod) - - if(damagetype & OXYLOSS) - adjustOxyLoss(175/damage_mod) - - //If something went wrong, just do normal oxyloss - if(!(damagetype | BRUTELOSS) && !(damagetype | FIRELOSS) && !(damagetype | TOXLOSS) && !(damagetype | OXYLOSS)) - adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) - - updatehealth() - return - - log_and_message_admins("[key_name(src)] commited suicide") - - var/datum/gender/T = gender_datums[get_visible_gender()] - - var/suicidemsg - suicidemsg = pick("[src] is attempting to bite [T.his] tongue off! It looks like [T.he] [T.is] trying to commit suicide.", \ - "[src] is jamming [T.his] thumbs into [T.his] eye sockets! It looks like [T.he] [T.is] trying to commit suicide.", \ - "[src] is twisting [T.his] own neck! It looks like [T.he] [T.is] trying to commit suicide.", \ - "[src] is holding [T.his] breath! It looks like [T.he] [T.is] trying to commit suicide.") - if(isSynthetic()) - suicidemsg = "[src] is attempting to switch [T.his] power off! It looks like [T.he] [T.is] trying to commit suicide." - visible_message(suicidemsg) - - adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) - updatehealth() - -/mob/living/carbon/brain/verb/suicide() - set hidden = 1 - - if (stat == 2) - to_chat(src, "You're already dead!") - return - - if (!ticker) - to_chat(src, "You can't commit suicide before the game starts!") - return - - if (suiciding) - to_chat(src, "You're already committing suicide! Be patient!") - return - - var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") - - if(confirm == "Yes") - suiciding = 1 - to_chat(viewers(loc),"[src]'s brain is growing dull and lifeless. It looks like it's lost the will to live.") - spawn(50) - death(0) - suiciding = 0 - -/mob/living/silicon/ai/verb/suicide() - set hidden = 1 - - if (stat == 2) - to_chat(src, "You're already dead!") - return - - if (suiciding) - to_chat(src, "You're already committing suicide! Be patient!") - return - - var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") - - if(confirm == "Yes") - suiciding = 1 - to_chat(viewers(src),"[src] is powering down. It looks like they're trying to commit suicide.") - //put em at -175 - adjustOxyLoss(max(getMaxHealth() * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) - updatehealth() - -/mob/living/silicon/robot/verb/suicide() - set hidden = 1 - - if (stat == 2) - to_chat(src, "You're already dead!") - return - - if (suiciding) - to_chat(src, "You're already committing suicide! Be patient!") - return - - var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") - - if(confirm == "Yes") - suiciding = 1 - to_chat(viewers(src),"[src] is powering down. It looks like they're trying to commit suicide.") - //put em at -175 - adjustOxyLoss(max(getMaxHealth() * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) - updatehealth() - -/mob/living/silicon/pai/verb/suicide() - set category = "pAI Commands" - set desc = "Kill yourself and become a ghost (You will receive a confirmation prompt)" - set name = "pAI Suicide" - var/answer = input("REALLY kill yourself? This action can't be undone.", "Suicide", "No") in list ("Yes", "No") - if(answer == "Yes") - var/obj/item/device/paicard/card = loc - card.removePersonality() - var/turf/T = get_turf_or_move(card.loc) - for (var/mob/M in viewers(T)) - M.show_message("[src] flashes a message across its screen, \"Wiping core files. Please acquire a new personality to continue using pAI device functions.\"", 3, "[src] bleeps electronically.", 2) - death(0) - else - to_chat(src, "Aborting suicide attempt.") +/mob/var/suiciding = 0 + +/mob/living/carbon/human/verb/suicide() + set hidden = 1 + + if (stat == DEAD) + to_chat(src, "You're already dead!") + return + + if (!ticker) + to_chat(src, "You can't commit suicide before the game starts!") + return + + if(!player_is_antag(mind)) + message_admins("[ckey] has tried to suicide, but they were not permitted due to not being antagonist as human.", 1) + to_chat(src, "No. Adminhelp if there is a legitimate reason.") + return + + if (suiciding) + to_chat(src, "You're already committing suicide! Be patient!") + return + + var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") + + if(confirm == "Yes") + if(!canmove || restrained()) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide + to_chat(src, "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))") + return + suiciding = 15 + does_not_breathe = 0 //Prevents ling-suicide zombies, or something + var/obj/item/held_item = get_active_hand() + if(held_item) + var/damagetype = held_item.suicide_act(src) + if(damagetype) + log_and_message_admins("[key_name(src)] commited suicide using \a [held_item]") + var/damage_mod = 1 + switch(damagetype) //Sorry about the magic numbers. + //brute = 1, burn = 2, tox = 4, oxy = 8 + if(15) //4 damage types + damage_mod = 4 + + if(6, 11, 13, 14) //3 damage types + damage_mod = 3 + + if(3, 5, 7, 9, 10, 12) //2 damage types + damage_mod = 2 + + if(1, 2, 4, 8) //1 damage type + damage_mod = 1 + + else //This should not happen, but if it does, everything should still work + damage_mod = 1 + + //Do 175 damage divided by the number of damage types applied. + if(damagetype & BRUTELOSS) + adjustBruteLoss(30/damage_mod) //hack to prevent gibbing + adjustOxyLoss(145/damage_mod) + + if(damagetype & FIRELOSS) + adjustFireLoss(175/damage_mod) + + if(damagetype & TOXLOSS) + adjustToxLoss(175/damage_mod) + + if(damagetype & OXYLOSS) + adjustOxyLoss(175/damage_mod) + + //If something went wrong, just do normal oxyloss + if(!(damagetype | BRUTELOSS) && !(damagetype | FIRELOSS) && !(damagetype | TOXLOSS) && !(damagetype | OXYLOSS)) + adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) + + updatehealth() + return + + log_and_message_admins("[key_name(src)] commited suicide") + + var/datum/gender/T = gender_datums[get_visible_gender()] + + var/suicidemsg + suicidemsg = pick("[src] is attempting to bite [T.his] tongue off! It looks like [T.he] [T.is] trying to commit suicide.", \ + "[src] is jamming [T.his] thumbs into [T.his] eye sockets! It looks like [T.he] [T.is] trying to commit suicide.", \ + "[src] is twisting [T.his] own neck! It looks like [T.he] [T.is] trying to commit suicide.", \ + "[src] is holding [T.his] breath! It looks like [T.he] [T.is] trying to commit suicide.") + if(isSynthetic()) + suicidemsg = "[src] is attempting to switch [T.his] power off! It looks like [T.he] [T.is] trying to commit suicide." + visible_message(suicidemsg) + + adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) + updatehealth() + +/mob/living/carbon/brain/verb/suicide() + set hidden = 1 + + if (stat == 2) + to_chat(src, "You're already dead!") + return + + if (!ticker) + to_chat(src, "You can't commit suicide before the game starts!") + return + + if (suiciding) + to_chat(src, "You're already committing suicide! Be patient!") + return + + var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") + + if(confirm == "Yes") + suiciding = 1 + to_chat(viewers(loc),"[src]'s brain is growing dull and lifeless. It looks like it's lost the will to live.") + spawn(50) + death(0) + suiciding = 0 + +/mob/living/silicon/ai/verb/suicide() + set hidden = 1 + + if (stat == 2) + to_chat(src, "You're already dead!") + return + + if (suiciding) + to_chat(src, "You're already committing suicide! Be patient!") + return + + var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") + + if(confirm == "Yes") + suiciding = 1 + to_chat(viewers(src),"[src] is powering down. It looks like they're trying to commit suicide.") + //put em at -175 + adjustOxyLoss(max(getMaxHealth() * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) + updatehealth() + +/mob/living/silicon/robot/verb/suicide() + set hidden = 1 + + if (stat == 2) + to_chat(src, "You're already dead!") + return + + if (suiciding) + to_chat(src, "You're already committing suicide! Be patient!") + return + + var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") + + if(confirm == "Yes") + suiciding = 1 + to_chat(viewers(src),"[src] is powering down. It looks like they're trying to commit suicide.") + //put em at -175 + adjustOxyLoss(max(getMaxHealth() * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) + updatehealth() + +/mob/living/silicon/pai/verb/suicide() + set category = "pAI Commands" + set desc = "Kill yourself and become a ghost (You will receive a confirmation prompt)" + set name = "pAI Suicide" + var/answer = input("REALLY kill yourself? This action can't be undone.", "Suicide", "No") in list ("Yes", "No") + if(answer == "Yes") + var/obj/item/device/paicard/card = loc + card.removePersonality() + var/turf/T = get_turf_or_move(card.loc) + for (var/mob/M in viewers(T)) + M.show_message("[src] flashes a message across its screen, \"Wiping core files. Please acquire a new personality to continue using pAI device functions.\"", 3, "[src] bleeps electronically.", 2) + death(0) + else + to_chat(src, "Aborting suicide attempt.") diff --git a/code/game/verbs/who.dm b/code/modules/client/verbs/who.dm similarity index 96% rename from code/game/verbs/who.dm rename to code/modules/client/verbs/who.dm index 385a3230200..ebcc5859eda 100644 --- a/code/game/verbs/who.dm +++ b/code/modules/client/verbs/who.dm @@ -1,208 +1,208 @@ -/client/verb/who() - set name = "Who" - set category = "OOC" - - var/msg = "Current Players:\n" - - var/list/Lines = list() - - if(holder && (R_ADMIN & holder.rights || R_MOD & holder.rights)) - for(var/client/C in GLOB.clients) - var/entry = "\t[C.key]" - if(C.holder && C.holder.fakekey) - entry += " (as [C.holder.fakekey])" - entry += " - Playing as [C.mob.real_name]" - switch(C.mob.stat) - if(UNCONSCIOUS) - entry += " - Unconscious" - if(DEAD) - if(isobserver(C.mob)) - var/mob/observer/dead/O = C.mob - if(O.started_as_observer) - entry += " - Observing" - else - entry += " - DEAD" - else - entry += " - DEAD" - - var/age - if(isnum(C.player_age)) - age = C.player_age - else - age = 0 - - if(age <= 1) - age = "[age]" - else if(age < 10) - age = "[age]" - - entry += " - [age]" - - if(is_special_character(C.mob)) - entry += " - Antagonist" - - if(C.is_afk()) - var/seconds = C.last_activity_seconds() - entry += " (AFK - " - entry += "[round(seconds / 60)] minutes, " - entry += "[seconds % 60] seconds)" - - entry += " (?)" - Lines += entry - else - for(var/client/C in GLOB.clients) - if(C.holder && C.holder.fakekey) - Lines += C.holder.fakekey - else - Lines += C.key - - for(var/line in sortList(Lines)) - msg += "[line]\n" - - msg += "Total Players: [length(Lines)]" - to_chat(src,msg) - -/client/verb/staffwho() - set category = "Admin" - set name = "Staffwho" - - var/message = get_staffwho_message(holder) - to_chat(src, message) - -// VOREStation Edit - This whole proc has various vorestation edits throughout. Practically every other line. -/proc/get_staffwho_message(datum/admins/holder) - var/msg = "" - var/modmsg = "" - var/devmsg = "" - var/eventMmsg = "" - var/num_mods_online = 0 - var/num_admins_online = 0 - var/num_devs_online = 0 - var/num_event_managers_online = 0 - - if(holder) - for(var/client/C in GLOB.admins) - if(R_ADMIN & C.holder.rights && R_BAN & C.holder.rights) - - if(C.holder.fakekey && (!R_ADMIN & holder.rights && !R_MOD & holder.rights)) //Event Managerss can't see stealthmins - continue - - msg += "\t[C] is a [C.holder.rank]" - - if(C.holder.fakekey) - msg += " (as [C.holder.fakekey])" - - if(isobserver(C.mob)) - msg += " - Observing" - else if(istype(C.mob,/mob/new_player)) - msg += " - Lobby" - else - msg += " - Playing" - - if(C.is_afk()) - var/seconds = C.last_activity_seconds() - msg += " (AFK - " - msg += "[round(seconds / 60)] minutes, " - msg += "[seconds % 60] seconds)" - msg += "\n" - - num_admins_online++ - else if(R_ADMIN & C.holder.rights && !(R_SERVER & C.holder.rights)) - modmsg += "\t[C] is a [C.holder.rank]" - - if(C.holder.fakekey && (!R_ADMIN & holder.rights && !R_MOD & holder.rights)) - continue - if(C.holder.fakekey) - msg += " (as [C.holder.fakekey])" - - if(isobserver(C.mob)) - modmsg += " - Observing" - else if(istype(C.mob,/mob/new_player)) - modmsg += " - Lobby" - else - modmsg += " - Playing" - - if(C.is_afk()) - var/seconds = C.last_activity_seconds() - modmsg += " (AFK - " - modmsg += "[round(seconds / 60)] minutes, " - modmsg += "[seconds % 60] seconds)" - modmsg += "\n" - num_mods_online++ - - else if(R_SERVER & C.holder.rights) - if(C.holder.fakekey && (!R_ADMIN & holder.rights && !R_MOD & holder.rights)) - continue - devmsg += "\t[C] is a [C.holder.rank]" - if(C.holder.fakekey) - devmsg += " (as [C.holder.fakekey])" - if(isobserver(C.mob)) - devmsg += " - Observing" - else if(istype(C.mob,/mob/new_player)) - devmsg += " - Lobby" - else - devmsg += " - Playing" - - if(C.is_afk()) - var/seconds = C.last_activity_seconds() - devmsg += "(AFK - " - devmsg += "[round(seconds / 60)] minutes, " - devmsg += "[seconds % 60] seconds)" - devmsg += "\n" - num_devs_online++ - - else - if(C.holder.fakekey && (!R_ADMIN & holder.rights && !R_MOD & holder.rights)) - continue - eventMmsg += "\t[C] is a [C.holder.rank]" - if(C.holder.fakekey) - eventMmsg += " (as [C.holder.fakekey])" - if(isobserver(C.mob)) - eventMmsg += " - Observing" - else if(istype(C.mob,/mob/new_player)) - eventMmsg += " - Lobby" - else - eventMmsg += " - Playing" - - if(C.is_afk()) - var/seconds = C.last_activity_seconds() - eventMmsg += " (AFK - " - eventMmsg += "[round(seconds / 60)] minutes, " - eventMmsg += "[seconds % 60] seconds)" - eventMmsg += "\n" - num_event_managers_online++ - - else - for(var/client/C in GLOB.admins) - if(R_ADMIN & C.holder.rights && R_BAN & C.holder.rights) - if(!C.holder.fakekey) - msg += "\t[C] is a [C.holder.rank]\n" - num_admins_online++ - else if(R_ADMIN & C.holder.rights && !(R_SERVER & C.holder.rights)) - if(!C.holder.fakekey) - modmsg += "\t[C] is a [C.holder.rank]\n" - num_mods_online++ - else if(R_SERVER & C.holder.rights) - if(!C.holder.fakekey) - devmsg += "\t[C] is a [C.holder.rank]\n" - num_devs_online++ - else - if(!C.holder.fakekey) - eventMmsg += "\t[C] is a [C.holder.rank]\n" - num_event_managers_online++ - - msg = "Current Admins ([num_admins_online]):\n" + msg - - if(config.show_mods) - msg += "\n Current Game Masters ([num_mods_online]):\n" + modmsg - - if(config.show_devs) - msg += "\n Current Developers ([num_devs_online]):\n" + devmsg - - if(config.show_event_managers) - msg += "\n Current Miscellaneous ([num_event_managers_online]):\n" + eventMmsg - - msg += "\nAdminhelps are also sent to Discord. If no admins are available in game try anyway and an admin on Discord may see it and respond." - - return msg - +/client/verb/who() + set name = "Who" + set category = "OOC" + + var/msg = "Current Players:\n" + + var/list/Lines = list() + + if(holder && (R_ADMIN & holder.rights || R_MOD & holder.rights)) + for(var/client/C in GLOB.clients) + var/entry = "\t[C.key]" + if(C.holder && C.holder.fakekey) + entry += " (as [C.holder.fakekey])" + entry += " - Playing as [C.mob.real_name]" + switch(C.mob.stat) + if(UNCONSCIOUS) + entry += " - Unconscious" + if(DEAD) + if(isobserver(C.mob)) + var/mob/observer/dead/O = C.mob + if(O.started_as_observer) + entry += " - Observing" + else + entry += " - DEAD" + else + entry += " - DEAD" + + var/age + if(isnum(C.player_age)) + age = C.player_age + else + age = 0 + + if(age <= 1) + age = "[age]" + else if(age < 10) + age = "[age]" + + entry += " - [age]" + + if(is_special_character(C.mob)) + entry += " - Antagonist" + + if(C.is_afk()) + var/seconds = C.last_activity_seconds() + entry += " (AFK - " + entry += "[round(seconds / 60)] minutes, " + entry += "[seconds % 60] seconds)" + + entry += " (?)" + Lines += entry + else + for(var/client/C in GLOB.clients) + if(C.holder && C.holder.fakekey) + Lines += C.holder.fakekey + else + Lines += C.key + + for(var/line in sortList(Lines)) + msg += "[line]\n" + + msg += "Total Players: [length(Lines)]" + to_chat(src,msg) + +/client/verb/staffwho() + set category = "Admin" + set name = "Staffwho" + + var/message = get_staffwho_message(holder) + to_chat(src, message) + +// VOREStation Edit - This whole proc has various vorestation edits throughout. Practically every other line. +/proc/get_staffwho_message(datum/admins/holder) + var/msg = "" + var/modmsg = "" + var/devmsg = "" + var/eventMmsg = "" + var/num_mods_online = 0 + var/num_admins_online = 0 + var/num_devs_online = 0 + var/num_event_managers_online = 0 + + if(holder) + for(var/client/C in GLOB.admins) + if(R_ADMIN & C.holder.rights && R_BAN & C.holder.rights) + + if(C.holder.fakekey && (!R_ADMIN & holder.rights && !R_MOD & holder.rights)) //Event Managerss can't see stealthmins + continue + + msg += "\t[C] is a [C.holder.rank]" + + if(C.holder.fakekey) + msg += " (as [C.holder.fakekey])" + + if(isobserver(C.mob)) + msg += " - Observing" + else if(istype(C.mob,/mob/new_player)) + msg += " - Lobby" + else + msg += " - Playing" + + if(C.is_afk()) + var/seconds = C.last_activity_seconds() + msg += " (AFK - " + msg += "[round(seconds / 60)] minutes, " + msg += "[seconds % 60] seconds)" + msg += "\n" + + num_admins_online++ + else if(R_ADMIN & C.holder.rights && !(R_SERVER & C.holder.rights)) + modmsg += "\t[C] is a [C.holder.rank]" + + if(C.holder.fakekey && (!R_ADMIN & holder.rights && !R_MOD & holder.rights)) + continue + if(C.holder.fakekey) + msg += " (as [C.holder.fakekey])" + + if(isobserver(C.mob)) + modmsg += " - Observing" + else if(istype(C.mob,/mob/new_player)) + modmsg += " - Lobby" + else + modmsg += " - Playing" + + if(C.is_afk()) + var/seconds = C.last_activity_seconds() + modmsg += " (AFK - " + modmsg += "[round(seconds / 60)] minutes, " + modmsg += "[seconds % 60] seconds)" + modmsg += "\n" + num_mods_online++ + + else if(R_SERVER & C.holder.rights) + if(C.holder.fakekey && (!R_ADMIN & holder.rights && !R_MOD & holder.rights)) + continue + devmsg += "\t[C] is a [C.holder.rank]" + if(C.holder.fakekey) + devmsg += " (as [C.holder.fakekey])" + if(isobserver(C.mob)) + devmsg += " - Observing" + else if(istype(C.mob,/mob/new_player)) + devmsg += " - Lobby" + else + devmsg += " - Playing" + + if(C.is_afk()) + var/seconds = C.last_activity_seconds() + devmsg += "(AFK - " + devmsg += "[round(seconds / 60)] minutes, " + devmsg += "[seconds % 60] seconds)" + devmsg += "\n" + num_devs_online++ + + else + if(C.holder.fakekey && (!R_ADMIN & holder.rights && !R_MOD & holder.rights)) + continue + eventMmsg += "\t[C] is a [C.holder.rank]" + if(C.holder.fakekey) + eventMmsg += " (as [C.holder.fakekey])" + if(isobserver(C.mob)) + eventMmsg += " - Observing" + else if(istype(C.mob,/mob/new_player)) + eventMmsg += " - Lobby" + else + eventMmsg += " - Playing" + + if(C.is_afk()) + var/seconds = C.last_activity_seconds() + eventMmsg += " (AFK - " + eventMmsg += "[round(seconds / 60)] minutes, " + eventMmsg += "[seconds % 60] seconds)" + eventMmsg += "\n" + num_event_managers_online++ + + else + for(var/client/C in GLOB.admins) + if(R_ADMIN & C.holder.rights && R_BAN & C.holder.rights) + if(!C.holder.fakekey) + msg += "\t[C] is a [C.holder.rank]\n" + num_admins_online++ + else if(R_ADMIN & C.holder.rights && !(R_SERVER & C.holder.rights)) + if(!C.holder.fakekey) + modmsg += "\t[C] is a [C.holder.rank]\n" + num_mods_online++ + else if(R_SERVER & C.holder.rights) + if(!C.holder.fakekey) + devmsg += "\t[C] is a [C.holder.rank]\n" + num_devs_online++ + else + if(!C.holder.fakekey) + eventMmsg += "\t[C] is a [C.holder.rank]\n" + num_event_managers_online++ + + msg = "Current Admins ([num_admins_online]):\n" + msg + + if(config.show_mods) + msg += "\n Current Game Masters ([num_mods_online]):\n" + modmsg + + if(config.show_devs) + msg += "\n Current Developers ([num_devs_online]):\n" + devmsg + + if(config.show_event_managers) + msg += "\n Current Miscellaneous ([num_event_managers_online]):\n" + eventMmsg + + msg += "\nAdminhelps are also sent to Discord. If no admins are available in game try anyway and an admin on Discord may see it and respond." + + return msg + diff --git a/vorestation.dme b/vorestation.dme index 6bb46869ec9..7397f343385 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1572,12 +1572,6 @@ #include "code\game\turfs\unsimulated\shuttle.dm" #include "code\game\turfs\unsimulated\sky_vr.dm" #include "code\game\turfs\unsimulated\walls.dm" -#include "code\game\verbs\advanced_who.dm" -#include "code\game\verbs\character_directory.dm" -#include "code\game\verbs\ignore.dm" -#include "code\game\verbs\ooc.dm" -#include "code\game\verbs\suicide.dm" -#include "code\game\verbs\who.dm" #include "code\js\byjax.dm" #include "code\js\menus.dm" #include "code\modules\admin\admin.dm" @@ -1856,6 +1850,13 @@ #include "code\modules\client\preference_setup\vore\07_traits.dm" #include "code\modules\client\preference_setup\vore\08_nif.dm" #include "code\modules\client\preference_setup\vore\09_misc.dm" +#include "code\modules\client\verbs\advanced_who.dm" +#include "code\modules\client\verbs\character_directory.dm" +#include "code\modules\client\verbs\ignore.dm" +#include "code\modules\client\verbs\ooc.dm" +#include "code\modules\client\verbs\ping.dm" +#include "code\modules\client\verbs\suicide.dm" +#include "code\modules\client\verbs\who.dm" #include "code\modules\clothing\chameleon.dm" #include "code\modules\clothing\clothing.dm" #include "code\modules\clothing\clothing_accessories.dm"