diff --git a/code/datums/disease.dm b/code/datums/disease.dm index ba2fa63f4f2..f54da940f88 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -91,194 +91,6 @@ to null does not delete the object itself. Thank you. return result -/mob/proc/contract_disease(var/datum/disease/virus, var/skip_this = 0, var/force_species_check=1) -// world << "Contract_disease called by [src] with virus [virus]" - if(stat >=2) return - if(virus.type in resistances) - if(prob(99.9)) return - resistances.Remove(virus.type)//the resistance is futile - - for(var/datum/disease/D in viruses) - if(istype(D, virus.type)) - return // two viruses of the same kind can't infect a body at once!! - - - if(force_species_check) - var/fail = 1 - for(var/name in virus.affected_species) - var/mob_type = text2path("/mob/living/carbon/[lowertext(name)]") - if(mob_type && istype(src, mob_type)) - fail = 0 - break - if(fail) return - - if(skip_this == 1) - //if(src.virus) < -- this used to replace the current disease. Not anymore! - //src.virus.cure(0) - - var/datum/disease/v = new virus.type - src.viruses += v - v.affected_mob = src - v.strain_data = v.strain_data.Copy() - v.holder = src - if(prob(5)) - v.carrier = 1 - return - - //if(src.virus) // - //return // - - -/* - var/list/clothing_areas = list() - var/list/covers = list(UPPER_TORSO,LOWER_TORSO,LEGS,FEET,ARMS,HANDS) - for(var/Covers in covers) - clothing_areas[Covers] = list() - - for(var/obj/item/clothing/Clothing in src) - if(Clothing) - for(var/Covers in covers) - if(Clothing&Covers) - clothing_areas[Covers] += Clothing - -*/ - if(prob(15/virus.permeability_mod)) return //the power of immunity compels this disease! - - var/obj/item/clothing/Cl = null - var/passed = 1 - - //chances to target this zone - var/head_ch - var/body_ch - var/hands_ch - var/feet_ch - - switch(virus.spread_type) - if(CONTACT_HANDS) - head_ch = 0 - body_ch = 0 - hands_ch = 100 - feet_ch = 0 - if(CONTACT_FEET) - head_ch = 0 - body_ch = 0 - hands_ch = 0 - feet_ch = 100 - else - head_ch = 100 - body_ch = 100 - hands_ch = 25 - feet_ch = 25 - - - var/target_zone = pick(head_ch;1,body_ch;2,hands_ch;3,feet_ch;4)//1 - head, 2 - body, 3 - hands, 4- feet - - if(istype(src, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = src - - switch(target_zone) - if(1) - if(isobj(H.head)) - Cl = H.head - passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) -// world << "Head pass [passed]" - if(passed && isobj(H.wear_mask)) - Cl = H.wear_mask - passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) -// world << "Mask pass [passed]" - if(2)//arms and legs included - if(isobj(H.wear_suit)) - Cl = H.wear_suit - passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) -// world << "Suit pass [passed]" - if(passed && isobj(H.slot_w_uniform)) - Cl = H.slot_w_uniform - passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) -// world << "Uniform pass [passed]" - if(3) - if(isobj(H.wear_suit) && H.wear_suit.body_parts_covered&HANDS) - Cl = H.wear_suit - passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) -// world << "Suit pass [passed]" - - if(passed && isobj(H.gloves)) - Cl = H.gloves - passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) -// world << "Gloves pass [passed]" - if(4) - if(isobj(H.wear_suit) && H.wear_suit.body_parts_covered&FEET) - Cl = H.wear_suit - passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) -// world << "Suit pass [passed]" - - if(passed && isobj(H.shoes)) - Cl = H.shoes - passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) -// world << "Shoes pass [passed]" - else - src << "Something strange's going on, something's wrong." - - /*if("feet") - if(H.shoes && istype(H.shoes, /obj/item/clothing/)) - Cl = H.shoes - passed = prob(Cl.permeability_coefficient*100) - // - world << "Shoes pass [passed]" - */ // - else if(istype(src, /mob/living/carbon/monkey)) - var/mob/living/carbon/monkey/M = src - switch(target_zone) - if(1) - if(M.wear_mask && isobj(M.wear_mask)) - Cl = M.wear_mask - passed = prob(Cl.permeability_coefficient*100+virus.permeability_mod) - //world << "Mask pass [passed]" - - if(passed && virus.spread_type == AIRBORNE && internals) - passed = (prob(50*virus.permeability_mod)) - - if(passed) - //world << "Infection in the mob [src]. YAY" - - -/* - var/score = 0 - if(istype(src, /mob/living/carbon/human)) - if(src:gloves) score += 5 - if(istype(src:wear_suit, /obj/item/clothing/suit/space)) score += 10 - if(istype(src:wear_suit, /obj/item/clothing/suit/bio_suit)) score += 10 - if(istype(src:head, /obj/item/clothing/head/helmet/space)) score += 5 - if(istype(src:head, /obj/item/clothing/head/bio_hood)) score += 5 - if(wear_mask) - score += 5 - if((istype(src:wear_mask, /obj/item/clothing/mask) || istype(src:wear_mask, /obj/item/clothing/mask/surgical)) && !internal) - score += 5 - if(internal) - score += 5 - if(score > 20) - return - else if(score == 20 && prob(95)) - return - else if(score >= 15 && prob(75)) - return - else if(score >= 10 && prob(55)) - return - else if(score >= 5 && prob(35)) - return - else if(prob(15)) - return - else*/ - var/datum/disease/v = new virus.type - src.viruses += v - v.affected_mob = src - v.strain_data = v.strain_data.Copy() - v.holder = src - if(prob(5)) - v.carrier = 1 - return - return - - /datum/disease/proc/spread(var/atom/source=null) //world << "Disease [src] proc spread was called from holder [source]" diff --git a/code/defines/client.dm b/code/defines/client.dm index 489a4f6d4b3..a36280bf56b 100644 --- a/code/defines/client.dm +++ b/code/defines/client.dm @@ -32,6 +32,8 @@ var/karma = 0 var/karma_spent = 0 + var/STFU_ghosts //80+ rounds are fun to admin when text flies faster than airport security + var/STFU_radio //80+ rounds are fun to admin when text flies faster than airport security var/midis = 1 //Check if midis should be played for someone -- Urist var/bubbles = 1 //Check if bubbles should be displayed for someone -- Doohl diff --git a/code/defines/mob/mob.dm b/code/defines/mob/mob.dm index a50e5ff67ab..528a2481b1b 100644 --- a/code/defines/mob/mob.dm +++ b/code/defines/mob/mob.dm @@ -231,3 +231,192 @@ the mob is also allowed to move without any sort of restriction. For instance, i switch (alert("Are you sure you wish to delete \the [A.name] at ([A.x],[A.y],[A.z]) ?", "Admin Delete Object","Yes","No")) if("Yes") log_admin("[usr.key] deleted [A.name] at ([A.x],[A.y],[A.z])") + + + +/mob/proc/contract_disease(var/datum/disease/virus, var/skip_this = 0, var/force_species_check=1) +// world << "Contract_disease called by [src] with virus [virus]" + if(stat >=2) return + if(virus.type in resistances) + if(prob(99.9)) return + resistances.Remove(virus.type)//the resistance is futile + + for(var/datum/disease/D in viruses) + if(istype(D, virus.type)) + return // two viruses of the same kind can't infect a body at once!! + + + if(force_species_check) + var/fail = 1 + for(var/name in virus.affected_species) + var/mob_type = text2path("/mob/living/carbon/[lowertext(name)]") + if(mob_type && istype(src, mob_type)) + fail = 0 + break + if(fail) return + + if(skip_this == 1) + //if(src.virus) < -- this used to replace the current disease. Not anymore! + //src.virus.cure(0) + + var/datum/disease/v = new virus.type + src.viruses += v + v.affected_mob = src + v.strain_data = v.strain_data.Copy() + v.holder = src + if(prob(5)) + v.carrier = 1 + return + + //if(src.virus) // + //return // + + +/* + var/list/clothing_areas = list() + var/list/covers = list(UPPER_TORSO,LOWER_TORSO,LEGS,FEET,ARMS,HANDS) + for(var/Covers in covers) + clothing_areas[Covers] = list() + + for(var/obj/item/clothing/Clothing in src) + if(Clothing) + for(var/Covers in covers) + if(Clothing&Covers) + clothing_areas[Covers] += Clothing + +*/ + if(prob(15/virus.permeability_mod)) return //the power of immunity compels this disease! + + var/obj/item/clothing/Cl = null + var/passed = 1 + + //chances to target this zone + var/head_ch + var/body_ch + var/hands_ch + var/feet_ch + + switch(virus.spread_type) + if(CONTACT_HANDS) + head_ch = 0 + body_ch = 0 + hands_ch = 100 + feet_ch = 0 + if(CONTACT_FEET) + head_ch = 0 + body_ch = 0 + hands_ch = 0 + feet_ch = 100 + else + head_ch = 100 + body_ch = 100 + hands_ch = 25 + feet_ch = 25 + + + var/target_zone = pick(head_ch;1,body_ch;2,hands_ch;3,feet_ch;4)//1 - head, 2 - body, 3 - hands, 4- feet + + if(istype(src, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = src + + switch(target_zone) + if(1) + if(isobj(H.head)) + Cl = H.head + passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) +// world << "Head pass [passed]" + if(passed && isobj(H.wear_mask)) + Cl = H.wear_mask + passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) +// world << "Mask pass [passed]" + if(2)//arms and legs included + if(isobj(H.wear_suit)) + Cl = H.wear_suit + passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) +// world << "Suit pass [passed]" + if(passed && isobj(H.slot_w_uniform)) + Cl = H.slot_w_uniform + passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) +// world << "Uniform pass [passed]" + if(3) + if(isobj(H.wear_suit) && H.wear_suit.body_parts_covered&HANDS) + Cl = H.wear_suit + passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) +// world << "Suit pass [passed]" + + if(passed && isobj(H.gloves)) + Cl = H.gloves + passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) +// world << "Gloves pass [passed]" + if(4) + if(isobj(H.wear_suit) && H.wear_suit.body_parts_covered&FEET) + Cl = H.wear_suit + passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) +// world << "Suit pass [passed]" + + if(passed && isobj(H.shoes)) + Cl = H.shoes + passed = prob(Cl.permeability_coefficient*100*virus.permeability_mod) +// world << "Shoes pass [passed]" + else + src << "Something strange's going on, something's wrong." + + /*if("feet") + if(H.shoes && istype(H.shoes, /obj/item/clothing/)) + Cl = H.shoes + passed = prob(Cl.permeability_coefficient*100) + // + world << "Shoes pass [passed]" + */ // + else if(istype(src, /mob/living/carbon/monkey)) + var/mob/living/carbon/monkey/M = src + switch(target_zone) + if(1) + if(M.wear_mask && isobj(M.wear_mask)) + Cl = M.wear_mask + passed = prob(Cl.permeability_coefficient*100+virus.permeability_mod) + //world << "Mask pass [passed]" + + if(passed && virus.spread_type == AIRBORNE && internals) + passed = (prob(50*virus.permeability_mod)) + + if(passed) + //world << "Infection in the mob [src]. YAY" + + +/* + var/score = 0 + if(istype(src, /mob/living/carbon/human)) + if(src:gloves) score += 5 + if(istype(src:wear_suit, /obj/item/clothing/suit/space)) score += 10 + if(istype(src:wear_suit, /obj/item/clothing/suit/bio_suit)) score += 10 + if(istype(src:head, /obj/item/clothing/head/helmet/space)) score += 5 + if(istype(src:head, /obj/item/clothing/head/bio_hood)) score += 5 + if(wear_mask) + score += 5 + if((istype(src:wear_mask, /obj/item/clothing/mask) || istype(src:wear_mask, /obj/item/clothing/mask/surgical)) && !internal) + score += 5 + if(internal) + score += 5 + if(score > 20) + return + else if(score == 20 && prob(95)) + return + else if(score >= 15 && prob(75)) + return + else if(score >= 10 && prob(55)) + return + else if(score >= 5 && prob(35)) + return + else if(prob(15)) + return + else*/ + var/datum/disease/v = new virus.type + src.viruses += v + v.affected_mob = src + v.strain_data = v.strain_data.Copy() + v.holder = src + if(prob(5)) + v.carrier = 1 + return + return \ No newline at end of file diff --git a/code/game/objects/radio/radio.dm b/code/game/objects/radio/radio.dm index 2467717652f..6efdee09d1a 100644 --- a/code/game/objects/radio/radio.dm +++ b/code/game/objects/radio/radio.dm @@ -233,6 +233,8 @@ var/list/heard_garbled = list() // garbled message for (var/mob/R in receive) + if (R.client && R.client.STFU_radio) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. + continue if (R.say_understands(M)) if (!ishuman(M) || istype(M.wear_mask, /obj/item/clothing/mask/gas/voice)) heard_masked += R @@ -282,7 +284,7 @@ var/quotedmsg = M.say_quote(message) - //This following recording is intended for research and feedback in the use of department radio channels. It was added on 30.3.2011 by errorage. + //This following recording is intended for research and feedback in the use of department radio channels. var/part_blackbox_b = " \[[freq_text]\] " // Tweaked for security headsets -- TLE var/blackbox_msg = "[part_a][M.name][part_blackbox_b][quotedmsg][part_c]" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 911208dd370..79111e5c01c 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -220,6 +220,8 @@ verbs += /obj/admins/proc/immreboot //immediate reboot verbs += /obj/admins/proc/restart //restart verbs += /client/proc/cmd_admin_create_centcom_report + verbs += /client/proc/toggle_hear_deadcast + verbs += /client/proc/toggle_hear_radio if (holder.level >= 0)//Mod******************************************************************** @@ -381,6 +383,9 @@ verbs -= /client/proc/toggleprayers verbs -= /client/proc/jump_to_dead_group verbs -= /client/proc/Blobize + verbs += /client/proc/toggle_clickproc //TODO ERRORAGE (Temporary proc while the enw clickproc is being tested) + verbs -= /client/proc/toggle_hear_deadcast + verbs -= /client/proc/toggle_hear_radio return @@ -615,6 +620,22 @@ using_new_click_proc = !using_new_click_proc world << "Testing of new click proc [using_new_click_proc ? "enabled" : "disabled"]" +/client/proc/toggle_hear_deadcast() + set name = "Toggle Hear Deadcast" + set category = "Admin" + + if(!holder) return + STFU_ghosts = !STFU_ghosts + usr << "You will now [STFU_ghosts ? "hear" : "not hear"] ghsots" + +/client/proc/toggle_hear_radio() + set name = "Toggle Hear Radio" + set category = "Admin" + + if(!holder) return + STFU_radio = !STFU_radio + usr << "You will now [STFU_radio ? "hear" : "not hear"] radio chatter from nearby radios or speakers" + /client/proc/hide_most_verbs()//Allows you to keep some functionality while hiding some verbs set name = "Toggle most admin verb visibility" set category = "Admin" diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 5cab9cd57a7..dd9e0a7afe8 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -314,57 +314,7 @@ for (var/mob/M in heard_a) M.show_message(rendered, 2) - /* - if(M.client) - spawn() - var/isbot = "" - if(istype(src, /mob/living/silicon)) - isbot = "bot" - var/speechtype = "say" - var/ending = copytext(message, length(message)) - if (ending == "?") - speechtype = "question" - else if (ending == "!") - speechtype = "exclamation" - - if(istype(M, /mob/living)) - if(M:ear_deaf && speechtype == "question") - speechtype = "say" - - var/obj/speech_bubble/B = new/obj/speech_bubble - B.icon = 'speechbubble.dmi' - B.parent = src - B.mouse_opacity = 0 - B.invisibility = invisibility - B.layer = 10 - - if(!M.client.bubbles || M == src) - var/image/I = image('speechbubble.dmi', B, "override") - I.override = 1 - M << I - - flick("[isbot][speechtype]", B) - - if(istype(loc, /turf)) - B.loc = loc - else - B.loc = loc.loc - - sleep(11) - del(B) - */ - - - -/* - for(var/obj/O in M) // This is terribly costly for such a unique circumstance, should probably do this a different way in the future -- TLE - if(istype(O, /obj/item/device/aicard)) - for(var/mob/M2 in O) - M2.show_message(rendered, 2) - break - break -*/ if (length(heard_b)) var/message_b diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 4710ec76ea1..50053a7e04c 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -43,7 +43,8 @@ if (istype(M, /mob/new_player)) continue if (M.stat == 2 || (M.client && M.client.holder && M.client.deadchat)) //admins can toggle deadchat on and off. This is a proc in admin.dm and is only give to Administrators and above - M.show_message(rendered, 2) + if(M.client && !M.client.STFU_ghosts) //Admin shut-off for ghosts chatter + M.show_message(rendered, 2) /mob/proc/say_understands(var/mob/other) if (src.stat == 2)