diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 9e3a127136..ceebe1f943 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -5,41 +5,47 @@ icon_state = "posibrain" w_class = 3 origin_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_DATA = 4) - var/searching = 0 + construction_cost = list(DEFAULT_WALL_MATERIAL=500,"glass"=500,"silver"=200,"gold"=200,"phoron"=100,"diamond"=10) construction_time = 75 + var/searching = 0 + var/askDelay = 10 * 60 * 1 req_access = list(access_robotics) locked = 0 mecha = null//This does not appear to be used outside of reference in mecha.dm. -/obj/item/device/mmi/digital/posibrain/New() - ..() - brainmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]" - brainmob.real_name = src.brainmob.name -/obj/item/device/mmi/digital/posibrain/attack_self(var/mob/user) - if(brainmob && !brainmob.key && !searching) +/obj/item/device/mmi/digital/posibrain/attack_self(mob/user as mob) + if(brainmob && !brainmob.key && searching == 0) //Start the process of searching for a new user. - user << "You carefully locate the manual activation switch and start the positronic brain's boot process." + user << "\blue You carefully locate the manual activation switch and start the positronic brain's boot process." icon_state = "posibrain-searching" - searching = 1 - var/datum/ghosttrap/G = get_ghost_trap("positronic brain") - G.request_player(brainmob, "A [src.name] has been booted by \the [user] in [get_area(user)]. ") + src.searching = 1 + src.request_player() spawn(600) reset_search() -/obj/item/device/mmi/digital/posibrain/attack_ghost(var/mob/dead/observer/user) - var/datum/ghosttrap/G = get_ghost_trap("positronic brain") - if(!G.assess_candidate(user)) - return - var/response = alert(user, "Are you sure you want to play as a positronic brain?", "Positronic brain request", "Yes", "No") - if(response == "Yes") - if(G.transfer_personality(user, brainmob)) - var/turf/T = get_turf(src) - T.visible_message("\The [src] chimes quietly.") - searching = 0 - name = "positronic brain ([brainmob.name])" - icon_state = "posibrain-occupied" - return +/obj/item/device/mmi/digital/posibrain/proc/request_player() + for(var/mob/dead/observer/O in player_list) + if(!O.MayRespawn()) + continue + if(jobban_isbanned(O, "AI") && jobban_isbanned(O, "Cyborg")) + continue + if(O.client) + if(O.client.prefs.be_special & BE_AI) + question(O.client) + +/obj/item/device/mmi/digital/posibrain/proc/question(var/client/C) + spawn(0) + if(!C) return + var/response = alert(C, "Someone is requesting a personality for a positronic brain. Would you like to play as one?", "Positronic brain request", "Yes", "No", "Never for this round") + if(response == "Yes") + response = alert(C, "Are you sure you want to play as a positronic brain?", "Positronic brain request", "Yes", "No") + if(!C || brainmob.key || 0 == searching) return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located. + if(response == "Yes") + transfer_personality(C.mob) + else if (response == "Never for this round") + C.prefs.be_special ^= BE_AI + /obj/item/device/mmi/digital/posibrain/transfer_identity(var/mob/living/carbon/H) ..() @@ -49,10 +55,6 @@ icon_state = "posibrain-occupied" return -/obj/item/device/mmi/digital/posibrain/proc/reset_search() - if(!searching || (src.brainmob && src.brainmob.key)) - return - searching = 0 /obj/item/device/mmi/digital/posibrain/proc/transfer_personality(var/mob/candidate) announce_ghost_joinleave(candidate, 0, "They are occupying a positronic brain now.") src.searching = 0 @@ -77,14 +79,16 @@ src.searching = 0 icon_state = "posibrain" - var/turf/T = get_turf(src) - T.visible_message("\The [src] brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?") + + var/turf/T = get_turf_or_move(src.loc) + for (var/mob/M in viewers(T)) + M.show_message("\blue The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?") /obj/item/device/mmi/digital/posibrain/examine(mob/user) if(!..(user)) return - var/msg = "*---------*\nThis is \icon[src] \a [src]!\n[desc]\n" + var/msg = "*---------*\nThis is \icon[src] \a [src]!\n[desc]\n" msg += "" if(src.brainmob && src.brainmob.key) @@ -95,7 +99,7 @@ if(DEAD) msg += "It appears to be completely inactive.\n" else msg += "It appears to be completely inactive.\n" - msg += "*---------*" + msg += "*---------*" user << msg return @@ -112,3 +116,7 @@ src.brainmob.emp_damage += rand(0,10) ..() +/obj/item/device/mmi/digital/posibrain/New() + ..() + src.brainmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]" + src.brainmob.real_name = src.brainmob.name diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm index 5930dd53e7..e133f82e6e 100644 --- a/code/modules/power/breaker_box.dm +++ b/code/modules/power/breaker_box.dm @@ -21,7 +21,7 @@ /obj/machinery/power/breakerbox/Destroy() ..() - for(var/obj/nano_module/rcon/R in world) + for(var/datum/nano_module/rcon/R in world) R.FindDevices() /obj/machinery/power/breakerbox/activated diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm index 36924d9ae7..16f3bc9159 100644 --- a/code/modules/power/smes_construction.dm +++ b/code/modules/power/smes_construction.dm @@ -78,7 +78,7 @@ /obj/machinery/power/smes/buildable/Destroy() ..() qdel(wires) - for(var/obj/nano_module/rcon/R in world) + for(var/datum/nano_module/rcon/R in world) R.FindDevices()