From 1a1d11e70f045a35b69984b53198a89120672d40 Mon Sep 17 00:00:00 2001 From: iamgoofball Date: Tue, 17 Sep 2013 18:35:36 -0700 Subject: [PATCH 1/8] - Added a "Show Crew Monitoring Console" Verb to the AI Commands section of the AI's verbs. --- code/game/machinery/computer/crew.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 86 ++++++++++++++++++++++-- 2 files changed, 83 insertions(+), 5 deletions(-) diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index a82c9e13c0f..5f3e9edee32 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -107,7 +107,7 @@ t += "" //user << browse(t, "window=crewcomp;size=900x600") //onclose(user, "crewcomp") - var/datum/browser/popup = new(user, "crewcomp", name, 900, 600) + var/datum/browser/popup = new/datum/browser(user, "crewcomp", name, 900, 600) popup.set_content(t) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 9be5fa05662..f86de08caa3 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -29,7 +29,7 @@ var/list/ai_list = list() var/icon/holo_icon//Default is assigned when AI is created. var/obj/item/device/pda/ai/aiPDA = null var/obj/item/device/multitool/aiMulti = null - var/obj/item/device/camera/ai_camera/aicamera = null + var/list/tracked = list( ) //MALFUNCTION var/datum/module_picker/malf_picker @@ -85,7 +85,6 @@ var/list/ai_list = list() aiPDA.name = name + " (" + aiPDA.ownjob + ")" aiMulti = new(src) - aicamera = new/obj/item/device/camera/ai_camera(src) if (istype(loc, /turf)) verbs.Add(/mob/living/silicon/ai/proc/ai_call_shuttle,/mob/living/silicon/ai/proc/ai_camera_track, \ @@ -223,6 +222,69 @@ var/list/ai_list = list() src << browse(dat, "window=airoster") onclose(src, "airoster") +/mob/living/silicon/ai/verb/ai_crew() + set category = "AI Commands" + set name = "Show Crew Monitoring Console" + src.scan() + var/t = "" + t += "Close
" + t += "" + var/list/logs = list() + for(var/obj/item/clothing/under/C in src.tracked) + var/log = "" + var/turf/pos = get_turf(C) + if((C) && (C.has_sensor) && (pos) && (pos.z == src.z) && C.sensor_mode) + if(istype(C.loc, /mob/living/carbon/human)) + + var/mob/living/carbon/human/H = C.loc + var/obj/item/ID = null + + if(H.wear_id) + ID = H.wear_id.GetID() + + var/dam1 = round(H.getOxyLoss(),1) + var/dam2 = round(H.getToxLoss(),1) + var/dam3 = round(H.getFireLoss(),1) + var/dam4 = round(H.getBruteLoss(),1) + + var/life_status = "[H.stat > 1 ? "Deceased" : "Living"]" + var/damage_report = "([dam1]/[dam2]/[dam3]/[dam4])" + + if(ID) + log += "" + else + log += "" + + switch(C.sensor_mode) + if(1) + log += "" + if(2) + log += "" + if(3) + var/area/player_area = get_area(H) + log += "" + logs += log + logs = sortList(logs) + for(var/log in logs) + t += log + t += "

Name

Vitals

Position

[ID.name]
Unknown[life_status]Not Available
[life_status] [damage_report]Not Available
[life_status] [damage_report][format_text(player_area.name)] ([pos.x], [pos.y])
" + var/datum/browser/popup = new/datum/browser(src, "crewcomp", name, 900, 600) + popup.set_content(t) + popup.set_title_image(src.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() + +/mob/living/silicon/ai/proc/scan() + for(var/obj/item/clothing/under/C in world) + if((C.has_sensor) && (istype(C.loc, /mob/living/carbon/human))) + var/check = 0 + for(var/O in src.tracked) + if(O == C) + check = 1 + break + if(!check) + src.tracked.Add(C) + return 1 + /mob/living/silicon/ai/proc/ai_call_shuttle() set category = "AI Commands" set name = "Call Emergency Shuttle" @@ -331,7 +393,14 @@ var/list/ai_list = list() H.attack_ai(src) //may as well recycle else src << "Unable to locate the holopad." - + // Iamgoofball: Crew Monitoring Verb + if (src.z > 6) + usr << "\red Unable to establish a connection: \black You're too far away from the station!" + return + if( href_list["cm_close"] ) + usr << browse(null, "window=crewcomp") + usr.unset_machine() + return if (href_list["track"]) var/mob/target = locate(href_list["track"]) in mob_list var/mob/living/silicon/ai/A = locate(href_list["track2"]) in mob_list @@ -408,6 +477,16 @@ var/list/ai_list = list() O.show_message(text("\red [] took a swipe at []!", M, src), 1) return +/mob/living/silicon/ai/attack_hand(mob/living/carbon/M as mob) + if(ishuman(M))//Checks to see if they are ninja + if(istype(M:gloves, /obj/item/clothing/gloves/space_ninja)&&M:gloves:candrain&&!M:gloves:draining) + if(M:wear_suit:s_control) + M:wear_suit:transfer_ai("AICORE", "NINJASUIT", src, M) + else + M << "\red ERROR: \black Remote access channel disabled." + return + + /mob/living/silicon/ai/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) M.emote("[M.friendly] [src]") @@ -681,4 +760,3 @@ var/list/ai_list = list() set name = "State Laws" checklaws() - From f1782544726135d39cf31e5cf9810d8b03a25715 Mon Sep 17 00:00:00 2001 From: iamgoofball Date: Tue, 17 Sep 2013 18:39:07 -0700 Subject: [PATCH 2/8] Added some lines that accidentally'd when I used the file. --- code/modules/mob/living/silicon/ai/ai.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index f86de08caa3..6ddcf090a17 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -29,6 +29,7 @@ var/list/ai_list = list() var/icon/holo_icon//Default is assigned when AI is created. var/obj/item/device/pda/ai/aiPDA = null var/obj/item/device/multitool/aiMulti = null + var/obj/item/device/camera/ai_camera/aicamera = null var/list/tracked = list( ) //MALFUNCTION @@ -85,6 +86,7 @@ var/list/ai_list = list() aiPDA.name = name + " (" + aiPDA.ownjob + ")" aiMulti = new(src) + aicamera = new/obj/item/device/camera/ai_camera(src) if (istype(loc, /turf)) verbs.Add(/mob/living/silicon/ai/proc/ai_call_shuttle,/mob/living/silicon/ai/proc/ai_camera_track, \ From 5edcf04434c16ee4e1c218e91961bf6604774aa2 Mon Sep 17 00:00:00 2001 From: iamgoofball Date: Wed, 18 Sep 2013 21:48:29 -0700 Subject: [PATCH 3/8] - Anti-Copypasta update. You can also now type "crew" to get to the menu quickly. --- code/modules/mob/living/silicon/ai/ai.dm | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 6ddcf090a17..7e72cf39460 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -224,10 +224,8 @@ var/list/ai_list = list() src << browse(dat, "window=airoster") onclose(src, "airoster") -/mob/living/silicon/ai/verb/ai_crew() - set category = "AI Commands" - set name = "Show Crew Monitoring Console" - src.scan() +/mob/living/silicon/ai/proc/crewmonitor() + src.cm_scan() var/t = "" t += "Close
" t += "" @@ -274,8 +272,17 @@ var/list/ai_list = list() popup.set_content(t) popup.set_title_image(src.browse_rsc_icon(src.icon, src.icon_state)) popup.open() +/mob/living/silicon/ai/verb/ai_crew() + set category = "AI Commands" + set name = "Show Crew Monitoring Console" + src.crewmonitor() -/mob/living/silicon/ai/proc/scan() +/mob/living/silicon/ai/verb/ai_crewhidden() + set category = "AI Commands" + set name = "crew" + set hidden = 1 + src.crewmonitor() +/mob/living/silicon/ai/proc/cm_scan() for(var/obj/item/clothing/under/C in world) if((C.has_sensor) && (istype(C.loc, /mob/living/carbon/human))) var/check = 0 From 345b6e0ac57baea5b7755e4e98b6e54c366cd198 Mon Sep 17 00:00:00 2001 From: iamgoofball Date: Thu, 19 Sep 2013 15:22:16 -0700 Subject: [PATCH 4/8] -Petethegoat is love. Petethegoat is life. Made the procs global, so both the physical computer and the AI use the same proc. --- code/game/machinery/computer/crew.dm | 79 +++++++++--------------- code/modules/mob/living/silicon/ai/ai.dm | 66 +------------------- 2 files changed, 31 insertions(+), 114 deletions(-) diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 5f3e9edee32..4de5d647d85 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -6,24 +6,15 @@ idle_power_usage = 250 active_power_usage = 500 circuit = "/obj/item/weapon/circuitboard/crew" - var/list/tracked = list( ) - - -/obj/machinery/computer/crew/New() - tracked = list() - ..() - /obj/machinery/computer/crew/attack_ai(mob/user) - attack_hand(user) - interact(user) - + crewmonitor(user) /obj/machinery/computer/crew/attack_hand(mob/user) add_fingerprint(user) if(stat & (BROKEN|NOPOWER)) return - interact(user) + crewmonitor(user) /obj/machinery/computer/crew/update_icon() @@ -53,46 +44,38 @@ return -/obj/machinery/computer/crew/interact(mob/user) - if(stat & (BROKEN|NOPOWER)) - return - if(!istype(user, /mob/living/silicon) && get_dist(src, user) > 1) - user.unset_machine() - user << browse(null, "window=powcomp") - return +proc/crewmonitor(mob/user) user.set_machine(src) - src.scan() - var/t = "" - t += "
Refresh " - t += "Close
" - t += "

Name

Vitals

Position

" + var/t = "

Name

Vitals

Position

" var/list/logs = list() - for(var/obj/item/clothing/under/C in src.tracked) + var/list/tracked = crewscan() + for(var/mob/living/carbon/human/H in tracked) var/log = "" - var/turf/pos = get_turf(C) - if((C) && (C.has_sensor) && (pos) && (pos.z == src.z) && C.sensor_mode) - if(istype(C.loc, /mob/living/carbon/human)) - - var/mob/living/carbon/human/H = C.loc + var/turf/pos = get_turf(H) + if(istype(H.w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/U = H.w_uniform + if(pos && pos.z == 1 && U.sensor_mode) var/obj/item/ID = null - if(H.wear_id) ID = H.wear_id.GetID() - var/dam1 = round(H.getOxyLoss(),1) - var/dam2 = round(H.getToxLoss(),1) - var/dam3 = round(H.getFireLoss(),1) - var/dam4 = round(H.getBruteLoss(),1) var/life_status = "[H.stat > 1 ? "Deceased" : "Living"]" - var/damage_report = "([dam1]/[dam2]/[dam3]/[dam4])" if(ID) log += "" else log += "" - switch(C.sensor_mode) + var/damage_report + if(U.sensor_mode > 1) + var/dam1 = round(H.getOxyLoss(),1) + var/dam2 = round(H.getToxLoss(),1) + var/dam3 = round(H.getFireLoss(),1) + var/dam4 = round(H.getBruteLoss(),1) + damage_report = "([dam1]/[dam2]/[dam3]/[dam4])" + + switch(U.sensor_mode) if(1) log += "" if(2) @@ -105,22 +88,16 @@ for(var/log in logs) t += log t += "

Name

Vitals

Position

[ID.name]
Unknown[life_status]Not Available
" - //user << browse(t, "window=crewcomp;size=900x600") - //onclose(user, "crewcomp") - var/datum/browser/popup = new/datum/browser(user, "crewcomp", name, 900, 600) + var/datum/browser/popup = new(user, "crewcomp", "Crew Monitoring", 900, 600) popup.set_content(t) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() -/obj/machinery/computer/crew/proc/scan() - for(var/obj/item/clothing/under/C in world) - if((C.has_sensor) && (istype(C.loc, /mob/living/carbon/human))) - var/check = 0 - for(var/O in src.tracked) - if(O == C) - check = 1 - break - if(!check) - src.tracked.Add(C) - return 1 \ No newline at end of file +proc/crewscan() + var/list/tracked = list() + for(var/mob/living/carbon/human/H in living_mob_list) + if(istype(H.w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/U = H.w_uniform + if(U.has_sensor && U.sensor_mode) + tracked.Add(H) + return tracked \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 7e72cf39460..bd21abe558c 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -224,76 +224,16 @@ var/list/ai_list = list() src << browse(dat, "window=airoster") onclose(src, "airoster") -/mob/living/silicon/ai/proc/crewmonitor() - src.cm_scan() - var/t = "" - t += "Close
" - t += "" - var/list/logs = list() - for(var/obj/item/clothing/under/C in src.tracked) - var/log = "" - var/turf/pos = get_turf(C) - if((C) && (C.has_sensor) && (pos) && (pos.z == src.z) && C.sensor_mode) - if(istype(C.loc, /mob/living/carbon/human)) - - var/mob/living/carbon/human/H = C.loc - var/obj/item/ID = null - - if(H.wear_id) - ID = H.wear_id.GetID() - - var/dam1 = round(H.getOxyLoss(),1) - var/dam2 = round(H.getToxLoss(),1) - var/dam3 = round(H.getFireLoss(),1) - var/dam4 = round(H.getBruteLoss(),1) - - var/life_status = "[H.stat > 1 ? "Deceased" : "Living"]" - var/damage_report = "([dam1]/[dam2]/[dam3]/[dam4])" - - if(ID) - log += "" - else - log += "" - - switch(C.sensor_mode) - if(1) - log += "" - if(2) - log += "" - if(3) - var/area/player_area = get_area(H) - log += "" - logs += log - logs = sortList(logs) - for(var/log in logs) - t += log - t += "

Name

Vitals

Position

[ID.name]
Unknown[life_status]Not Available
[life_status] [damage_report]Not Available
[life_status] [damage_report][format_text(player_area.name)] ([pos.x], [pos.y])
" - var/datum/browser/popup = new/datum/browser(src, "crewcomp", name, 900, 600) - popup.set_content(t) - popup.set_title_image(src.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() /mob/living/silicon/ai/verb/ai_crew() set category = "AI Commands" set name = "Show Crew Monitoring Console" - src.crewmonitor() + crewmonitor(src) /mob/living/silicon/ai/verb/ai_crewhidden() set category = "AI Commands" set name = "crew" set hidden = 1 - src.crewmonitor() -/mob/living/silicon/ai/proc/cm_scan() - for(var/obj/item/clothing/under/C in world) - if((C.has_sensor) && (istype(C.loc, /mob/living/carbon/human))) - var/check = 0 - for(var/O in src.tracked) - if(O == C) - check = 1 - break - if(!check) - src.tracked.Add(C) - return 1 - + crewmonitor(src) /mob/living/silicon/ai/proc/ai_call_shuttle() set category = "AI Commands" set name = "Call Emergency Shuttle" @@ -406,7 +346,7 @@ var/list/ai_list = list() if (src.z > 6) usr << "\red Unable to establish a connection: \black You're too far away from the station!" return - if( href_list["cm_close"] ) + if( href_list["close"] ) usr << browse(null, "window=crewcomp") usr.unset_machine() return From 832234df79b036aa41ac4c0f78980e6ddc634ac4 Mon Sep 17 00:00:00 2001 From: iamgoofball Date: Thu, 19 Sep 2013 15:32:38 -0700 Subject: [PATCH 5/8] - fixed ais being able to use computer when it was powered down --- code/game/machinery/computer/crew.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 4de5d647d85..c092364e8ec 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -8,6 +8,8 @@ circuit = "/obj/item/weapon/circuitboard/crew" /obj/machinery/computer/crew/attack_ai(mob/user) + if(stat & (BROKEN|NOPOWER)) + return crewmonitor(user) /obj/machinery/computer/crew/attack_hand(mob/user) From 059b14608c2b19bf0bc47b62ac750c407f66234b Mon Sep 17 00:00:00 2001 From: iamgoofball Date: Fri, 20 Sep 2013 19:15:19 -0700 Subject: [PATCH 6/8] -Moved user_setmachine to attack_hand like Giacomand requested. --- code/game/machinery/computer/crew.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index c092364e8ec..7a2a40ea9f2 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -13,6 +13,7 @@ crewmonitor(user) /obj/machinery/computer/crew/attack_hand(mob/user) + user.set_machine(src) add_fingerprint(user) if(stat & (BROKEN|NOPOWER)) return From da29b20d366446d4aa4a7aa422331263c88fbc85 Mon Sep 17 00:00:00 2001 From: iamgoofball Date: Fri, 20 Sep 2013 19:15:19 -0700 Subject: [PATCH 7/8] -Moved user_setmachine to attack_hand like Giacomand requested. --- code/game/machinery/computer/crew.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index c092364e8ec..5d0c32f2d51 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -13,6 +13,7 @@ crewmonitor(user) /obj/machinery/computer/crew/attack_hand(mob/user) + user.set_machine(src) add_fingerprint(user) if(stat & (BROKEN|NOPOWER)) return @@ -47,7 +48,6 @@ proc/crewmonitor(mob/user) - user.set_machine(src) var/t = "" var/list/logs = list() var/list/tracked = crewscan() From a8eed76d9cab98596f1aec16ba9e52e56d24d3c6 Mon Sep 17 00:00:00 2001 From: iamgoofball Date: Sun, 22 Sep 2013 14:31:50 -0700 Subject: [PATCH 8/8] Fixed the issues Aran pointed out. --- code/modules/mob/living/silicon/ai/ai.dm | 27 +----------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index bd21abe558c..2d8c202a78b 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -30,7 +30,6 @@ var/list/ai_list = list() var/obj/item/device/pda/ai/aiPDA = null var/obj/item/device/multitool/aiMulti = null var/obj/item/device/camera/ai_camera/aicamera = null - var/list/tracked = list( ) //MALFUNCTION var/datum/module_picker/malf_picker @@ -226,13 +225,7 @@ var/list/ai_list = list() /mob/living/silicon/ai/verb/ai_crew() set category = "AI Commands" - set name = "Show Crew Monitoring Console" - crewmonitor(src) - -/mob/living/silicon/ai/verb/ai_crewhidden() - set category = "AI Commands" - set name = "crew" - set hidden = 1 + set name = "Crew Monitoring Console" crewmonitor(src) /mob/living/silicon/ai/proc/ai_call_shuttle() set category = "AI Commands" @@ -342,14 +335,6 @@ var/list/ai_list = list() H.attack_ai(src) //may as well recycle else src << "Unable to locate the holopad." - // Iamgoofball: Crew Monitoring Verb - if (src.z > 6) - usr << "\red Unable to establish a connection: \black You're too far away from the station!" - return - if( href_list["close"] ) - usr << browse(null, "window=crewcomp") - usr.unset_machine() - return if (href_list["track"]) var/mob/target = locate(href_list["track"]) in mob_list var/mob/living/silicon/ai/A = locate(href_list["track2"]) in mob_list @@ -426,16 +411,6 @@ var/list/ai_list = list() O.show_message(text("\red [] took a swipe at []!", M, src), 1) return -/mob/living/silicon/ai/attack_hand(mob/living/carbon/M as mob) - if(ishuman(M))//Checks to see if they are ninja - if(istype(M:gloves, /obj/item/clothing/gloves/space_ninja)&&M:gloves:candrain&&!M:gloves:draining) - if(M:wear_suit:s_control) - M:wear_suit:transfer_ai("AICORE", "NINJASUIT", src, M) - else - M << "\red ERROR: \black Remote access channel disabled." - return - - /mob/living/silicon/ai/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) M.emote("[M.friendly] [src]")

Name

Vitals

Position