diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 2fa75536ec..b7a0fccf84 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -31,6 +31,8 @@ user.drop_item() item.loc = src user << "You attach the tank to the transfer valve." + message_admins("[key_name_admin(user)] attached both tanks to a transfer valve.") + log_game("[key_name_admin(user)] attached both tanks to a transfer valve.") update_icon() nanomanager.update_uis(src) // update all UIs attached to src @@ -66,7 +68,7 @@ /obj/item/device/transfer_valve/attack_self(mob/user as mob) ui_interact(user) - + /obj/item/device/transfer_valve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) // this is the data which will be sent to the ui @@ -77,13 +79,13 @@ data["valveOpen"] = valve_open ? 1 : 0 // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm ui = new(user, src, ui_key, "transfer_valve.tmpl", "Tank Transfer Valve", 460, 280) // when the ui is first opened this is the data it will use - ui.set_initial_data(data) + ui.set_initial_data(data) // open the new ui window ui.open() // auto update every Master Controller tick diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 12fea0ca24..2e90cfab87 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -170,6 +170,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost, you won't be able to play this round for another 30 minutes! You can't change your mind so choose wisely!)","Are you sure you want to ghost?","Ghost","Stay in body") if(response != "Ghost") return //didn't want to ghost after-all resting = 1 + message_admins("[key_name_admin(usr)] has ghosted.") + log_game("[key_name_admin(usr)] has ghosted.") var/mob/dead/observer/ghost = ghostize(0) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly. return diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 4cfad2504a..e3de241980 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -309,6 +309,7 @@ dead_mob_list -= src living_mob_list += src tod = null + timeofdeath = 0 // restore us to conciousness stat = CONSCIOUS diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index 89812a15f4..618ac76d77 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -19,6 +19,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates /datum/paiController + var/inquirer = null var/list/pai_candidates = list() var/list/asked = list() @@ -224,6 +225,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates M << browse(dat, "window=paiRecruit;size=580x580;") proc/findPAI(var/obj/item/device/paicard/p, var/mob/user) + inquirer = user requestRecruits() var/list/available = list() for(var/datum/paiCandidate/c in paiController.pai_candidates) @@ -363,7 +365,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates if(!C) return asked.Add(C.key) asked[C.key] = world.time - var/response = alert(C, "Someone is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", "Yes", "No", "Never for this round") + var/response = alert(C, "[inquirer] is requesting a pAI personality. Would you like to play as a personal AI?", "pAI Request", "Yes", "No", "Never for this round") if(!C) return //handle logouts that happen whilst the alert is waiting for a response. if(response == "Yes") recruitWindow(C.mob) @@ -372,4 +374,4 @@ var/datum/paiController/paiController // Global handler for pAI candidates if(warning == "Yes") asked[C.key] = INFINITY else - question(C) + question(C) \ No newline at end of file diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index d1bf4f170d..083089b3aa 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -155,14 +155,14 @@ // sync the organ's damage with its wounds src.update_damages() - + //If limb took enough damage, try to cut or tear it off if(body_part != UPPER_TORSO && body_part != LOWER_TORSO) //as hilarious as it is, getting hit on the chest too much shouldn't effectively gib you. if(config.limbs_can_break && brute_dam >= max_damage * config.organ_health_multiplier) if( (edge && prob(5 * brute)) || (brute > 20 && prob(2 * brute)) ) droplimb(1) return - + owner.updatehealth() var/result = update_icon() @@ -206,6 +206,9 @@ This function completely restores a damaged organ to perfect condition. perma_injury = 0 brute_dam = 0 burn_dam = 0 + germ_level = 0 + wounds.Cut() + number_wounds = 0 // handle internal organs for(var/datum/organ/internal/current_organ in internal_organs)