From 22c872a2a3eb9c2423ca84262f79fe78626ac446 Mon Sep 17 00:00:00 2001 From: "johnsonmt88@gmail.com" Date: Sat, 7 Jul 2012 19:32:31 +0000 Subject: [PATCH] Fixed damagetypes not working in admin investigate (The (?) button when someone adminhelps) Committing for Zekkeit/39kk9t - Attack logs now display the reagents the pill/snack had when you forced it down someone's throat. - List entries can now be edited and deleted! (don't try editing any of the contents list entries, it spits a runtime and I don't know how to make it uneditable) - Fix for issue 598. Now pAI carriers can re-enable the pAI radio settings. - Adminmoreinfo now displays the status of the mob. - Added a confirmation message to unjobbanning from the Display Job bans panel. - When being exposed to a virus, resistances are now taken into account. In addition, list entries that contained a virus that has been cured are now deleted. Proposed commit: http://nanotrasen.com/phpBB3/viewtopic.php?f=16&t=9262 git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4008 316c924e-a436-60f5-8080-3fe189b3f50e --- code/datums/disease.dm | 5 ++- code/game/objects/devices/paicard.dm | 2 ++ code/modules/admin/admin.dm | 29 +++++++++++------ code/modules/admin/verbs/modifyvariables.dm | 35 +++++++++------------ code/modules/chemical/Chemistry-Tools.dm | 23 +++++++++----- code/modules/mob/mob_cleanup.dm | 4 +-- 6 files changed, 57 insertions(+), 41 deletions(-) diff --git a/code/datums/disease.dm b/code/datums/disease.dm index 6a4bece7994..12956dc8ca5 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -153,7 +153,10 @@ to null does not delete the object itself. Thank you. affected_mob.alien_egg_flag = 0 // world << "Removing [src]" spawn(0) - del(src) + affected_mob.viruses -= src //I am a silly person for trying affected_mob.viruses.Find(src_type) instead of what it's like now and getting LOL WHAT IS THIS PROC + del(src) //IT'LL TAKE MORE THAN A LIST REMOVE TO DEFEAT US! + //world <<"Virus deleted successfully." + //world <<"Cured the disease, deleting virus..." return diff --git a/code/game/objects/devices/paicard.dm b/code/game/objects/devices/paicard.dm index a875dc383ec..c3c3f65f339 100644 --- a/code/game/objects/devices/paicard.dm +++ b/code/game/objects/devices/paicard.dm @@ -76,6 +76,8 @@ var/t1 = text2num(href_list["wires"]) if (radio.wires & t1) radio.wires &= ~t1 + else + radio.wires |= t1 if(href_list["setlaws"]) var/newlaws = copytext(sanitize(input("Enter any additional directives you would like your pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", "pAI Directive Configuration", pai.pai_laws) as message),1,MAX_MESSAGE_LEN) if(newlaws) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 969f9b96c3b..6344c0f9701 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -576,11 +576,12 @@ var/global/BSACooldown = 0 if (href_list["removejobban"]) if ((src.rank in list("Game Admin", "Game Master" ))) var/t = href_list["removejobban"] - if(t) - log_admin("[key_name(usr)] removed [t]") - message_admins("\blue [key_name_admin(usr)] removed [t]", 1) - jobban_remove(t) - href_list["ban"] = 1 // lets it fall through and refresh + if(input(alert("Do you want to unjobban [t]?","Unjobban confirmation", "Yes", "No") == "Yes")) //No more misclicks! Unless you do it twice. + if(t) + log_admin("[key_name(usr)] removed [t]") + message_admins("\blue [key_name_admin(usr)] removed [t]", 1) + jobban_remove(t) + href_list["ban"] = 1 // lets it fall through and refresh if (href_list["newban"]) if ((src.rank in list( "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" ))) @@ -1133,6 +1134,7 @@ var/global/BSACooldown = 0 return if(src && src.owner) +// //world <<"Passed the owner-check. Owner is [src.owner]. The mob is [M]." var/location_description = "" var/special_role_description = "" var/health_description = "" @@ -1140,10 +1142,11 @@ var/global/BSACooldown = 0 //Location if(T && isturf(T)) +// //world <<"Has a location." if(T.loc && isarea(T.loc)) - location_description = "([T.x], [T.y], [T.z] in area [T.loc])" + location_description = "([M.loc == T ? "at coordinates " : "in [M.loc] at coordinates "] [T.x], [T.y], [T.z] in area [T.loc])" else - location_description = "([T.x], [T.y], [T.z])" + location_description = "([M.loc == T ? "at coordinates " : "in [M.loc] at coordinates "] [T.x], [T.y], [T.z])" //Job + antagonist if(M.mind) @@ -1153,11 +1156,19 @@ var/global/BSACooldown = 0 //Health if(isliving(M)) - var/mob/living/L - health_description = "Oxy: [L.oxyloss] - Tox: [L.toxloss] - Fire: [L.fireloss] - Brute: [L.bruteloss] - Clone: [L.cloneloss] - Brain: [L.brainloss]" + var/mob/living/L = M + var/status + switch (M.stat) + if (0) status = "Alive" + if (1) status = "\yellow Unconscious" + if (2) status = "\red Dead" + health_description = "Status - [status]" + health_description += "
Oxy: [L.getOxyLoss()] - Tox: [L.getToxLoss()] - Fire: [L.getFireLoss()] - Brute: [L.getBruteLoss()] - Clone: [L.getCloneLoss()] - Brain: [L.getBrainLoss()]" else +// world <<"Has no health." health_description = "This mob type has no health to speak of." +// world <<"Displaying info about the mob..." src.owner << "Info about [M.name]: " src.owner << "Mob type = [M.type]; Damage = [health_description]" src.owner << "Name = [M.name]; Real_name = [M.real_name]; Original_name = [M.original_name]; Key = [M.key];" diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index f21fc02a619..e9d20d662e8 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -127,7 +127,6 @@ var/list/forbidden_varedit_object_types = list( if(!istype(L,/list)) src << "Not a List." var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine", "poo", "icon", "icon_state") - var/list/names = sortList(L) var/variable = input("Which var?","Var") as null|anything in names + "(ADD VAR)" @@ -211,10 +210,10 @@ var/list/forbidden_varedit_object_types = list( var/class = "text" if(src.holder && src.holder.marked_datum) class = input("What kind of variable?","Variable Type",default) as null|anything in list("text", - "num","type","reference","mob reference", "icon","file","list","edit referenced object","restore to default","marked datum ([holder.marked_datum.type])") + "num","type","reference","mob reference", "icon","file","list","edit referenced object","restore to default","marked datum ([holder.marked_datum.type])", "DELETE FROM LIST") else class = input("What kind of variable?","Variable Type",default) as null|anything in list("text", - "num","type","reference","mob reference", "icon","file","list","edit referenced object","restore to default") + "num","type","reference","mob reference", "icon","file","list","edit referenced object","restore to default", "DELETE FROM LIST") if(!class) return @@ -222,51 +221,45 @@ var/list/forbidden_varedit_object_types = list( if(holder.marked_datum && class == "marked datum ([holder.marked_datum.type])") class = "marked datum" - switch(class) + switch(class) //Spits a runtime error if you try to modify an entry in the contents list. Dunno how to fix it, yet. if("list") mod_list(variable) if("restore to default") - variable = initial(variable) + L[L.Find(variable)]=initial(variable) if("edit referenced object") modify_variables(variable) - if("(DELETE FROM LIST)") + if("DELETE FROM LIST") L -= variable return if("text") - variable = input("Enter new text:","Text",\ - variable) as text + L[L.Find(variable)] = input("Enter new text:","Text") as text if("num") - variable = input("Enter new number:","Num",\ - variable) as num + L[L.Find(variable)] = input("Enter new number:","Num") as num if("type") - variable = input("Enter type:","Type",variable) \ - in typesof(/obj,/mob,/area,/turf) + L[L.Find(variable)] = input("Enter type:","Type") in typesof(/obj,/mob,/area,/turf) if("reference") - variable = input("Select reference:","Reference",\ - variable) as mob|obj|turf|area in world + L[L.Find(variable)] = input("Select reference:","Reference") as mob|obj|turf|area in world if("mob reference") - variable = input("Select reference:","Reference",\ - variable) as mob in world + L[L.Find(variable)] = input("Select reference:","Reference") as mob in world if("file") - variable = input("Pick file:","File",variable) \ - as file + L[L.Find(variable)] = input("Pick file:","File") as file if("icon") - variable = input("Pick icon:","Icon",variable) \ - as icon + L[L.Find(variable)] = input("Pick icon:","Icon") as icon if("marked datum") - variable = holder.marked_datum + L[L.Find(variable)] = holder.marked_datum + /client/proc/modify_variables(var/atom/O, var/param_var_name = null, var/autodetect_class = 0) var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "cuffed", "ka", "last_eaten", "icon", "icon_state", "mutantrace") diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index 804d10c1003..3d1469516f5 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -694,6 +694,13 @@ afterattack(obj/target, mob/user , flag) return + proc/reagentlist(var/obj/item/weapon/reagent_containers/snack) //Attack logs for regents in pills + var/data + if(snack.reagents.reagent_list && snack.reagents.reagent_list.len) //find a reagent list if there is and check if it has entries + for (var/datum/reagent/R in snack.reagents.reagent_list) //no reagents will be left behind + data += "[R.id]([R.volume] units); " //Using IDs because SOME chemicals(I'm looking at you, chlorhydrate-beer) have the same names as other chemicals. + return data + else return "No reagents" //////////////////////////////////////////////////////////////////////////////// /// (Mixing)Glass. //////////////////////////////////////////////////////////////////////////////// @@ -1461,8 +1468,8 @@ if(!do_mob(user, M)) return - M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]") - user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]") + M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]") + user.attack_log += text("\[[time_stamp()]\] Fed [src.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]") log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") @@ -1635,8 +1642,8 @@ for(var/mob/O in viewers(world.view, user)) O.show_message("\red [user] feeds [M] [src].", 1) - M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]") - user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]") + M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]") + user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]") log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") @@ -1773,8 +1780,8 @@ for(var/mob/O in viewers(world.view, user)) O.show_message("\red [user] forces [M] to swallow [src].", 1) - M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]") - user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]") + M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]") + user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]") log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") @@ -2410,8 +2417,8 @@ for(var/mob/O in viewers(world.view, user)) O.show_message("\red [user] feeds [M] [src].", 1) - M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: \ref[reagents]") - user.attack_log += text("\[[time_stamp()]\] Fed [src.name] by [M.name] ([M.ckey]) Reagents: \ref[reagents]") + M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]") + user.attack_log += text("\[[time_stamp()]\] Fed [src.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]") log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") diff --git a/code/modules/mob/mob_cleanup.dm b/code/modules/mob/mob_cleanup.dm index 30c7f7c1cdb..60b4e36a0fd 100644 --- a/code/modules/mob/mob_cleanup.dm +++ b/code/modules/mob/mob_cleanup.dm @@ -8,7 +8,7 @@ Put (mob/proc)s here that are in dire need of a code cleanup. // This proc has some procs that should be extracted from it. I believe we can develop some helper procs from it - Rockdtben /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(stat >=2 || src.resistances.Find(virus.type)) return //This gives a chance to re-infect cured/vaccinated mobs // if(virus.type in resistances) @@ -59,7 +59,7 @@ Put (mob/proc)s here that are in dire need of a code cleanup. clothing_areas[Covers] += Clothing */ - if(prob(15/virus.permeability_mod)) return //the power of immunity compels this disease! + if(prob(15/virus.permeability_mod)) return //the power of immunity compels this disease! but then you forgot resistances var/obj/item/clothing/Cl = null var/passed = 1