From 9826985f3fee6a4755d7ee59ad91259b132018f4 Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Tue, 29 Mar 2016 21:44:29 -0400 Subject: [PATCH 1/2] Adds chatroom to PAIs --- code/game/machinery/PDApainter.dm | 2 +- code/modules/mob/living/silicon/pai/pai.dm | 4 +- .../living/silicon/pai/software_modules.dm | 117 ++++++++++++++++++ code/modules/pda/ai.dm | 12 +- nano/templates/pai_chatroom.tmpl | 76 ++++++++++++ 5 files changed, 207 insertions(+), 4 deletions(-) create mode 100644 nano/templates/pai_chatroom.tmpl diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index cdf5e479ef5..e34303b725b 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -28,7 +28,7 @@ /obj/machinery/pdapainter/New() ..() - var/blocked = list(/obj/item/device/pda/ai/pai, /obj/item/device/pda/ai, /obj/item/device/pda/heads, + var/blocked = list(/obj/item/device/pda/pai, /obj/item/device/pda/ai, /obj/item/device/pda/heads, /obj/item/device/pda/clear, /obj/item/device/pda/syndicate) for(var/P in typesof(/obj/item/device/pda)-blocked) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 420b897626b..e6f29376a3e 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -59,7 +59,7 @@ var/screen // Which screen our main window displays var/subscreen // Which specific function of the main screen is being displayed - var/obj/item/device/pda/ai/pai/pda = null + var/obj/item/device/pda/pai/pda = null var/secHUD = 0 // Toggles whether the Security HUD is active or not var/medHUD = 0 // Toggles whether the Medical HUD is active or not @@ -110,6 +110,8 @@ pda.name = pda.owner + " (" + pda.ownjob + ")" var/datum/data/pda/app/messenger/M = pda.find_program(/datum/data/pda/app/messenger) M.toff = 1 + var/datum/data/pda/app/chatroom/C = pda.find_program(/datum/data/pda/app/chatroom) + C.toff = 1 ..() /mob/living/silicon/pai/Login() diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm index 46d227399de..813fc7a7fa5 100644 --- a/code/modules/mob/living/silicon/pai/software_modules.dm +++ b/code/modules/mob/living/silicon/pai/software_modules.dm @@ -222,6 +222,123 @@ M.create_message(P, target, 1) return 1 +/datum/pai_software/chatroom + name = "Digital Chatroom" + ram_cost = 3 + id = "chatroom" + toggle = 0 + + on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1) + var/data[0] + + if(!user.pda) + return + var/datum/data/pda/app/chatroom/M = user.pda.find_program(/datum/data/pda/app/chatroom) + if(!M) + return + + data["receiver_off"] = M.toff + data["ringer_off"] = M.notify_silent + + var/list/rooms[0] + for(var/datum/chatroom/c in chatrooms) + if((M in c.users) || (M in c.invites) || c.is_public) + rooms += list(list(name = "[c]", ref = "\ref[c]")) + data["rooms"] = rooms + + if(M.disconnected || !M.messaging_available(1)) + data["disconnected"] = 1 + else if(M.current_room) + data["current_room"] = "\ref[M.current_room]" + data["current_room_name"] = M.current_room.name + data["current_room_topic"] = M.current_room.topic + data["messages"] = M.current_room.logs + var/list/users[0] + for(var/U in M.current_room.users) + var/datum/data/pda/app/chatroom/ch = U + users += "[ch.pda.owner]" + for(var/U in (M.current_room.invites - M.current_room.users)) + var/datum/data/pda/app/chatroom/ch = U + users += "[ch.pda.owner]" + data["users"] = users + + ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) + if(!ui) + // Don't copy-paste this unless you're making a pAI software module! + ui = new(user, user, id, "pai_chatroom.tmpl", "Digital Chatroom", 450, 600) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + + Topic(href, href_list) + var/mob/living/silicon/pai/P = usr + if(!istype(P)) + return + + if(!isnull(P.pda) && P.pda.can_use()) + var/datum/data/pda/app/chatroom/M = P.pda.find_program(/datum/data/pda/app/chatroom) + if(!M) + return + + if(href_list["toggler"]) + M.toff = href_list["toggler"] != "1" + return 1 + else if(href_list["ringer"]) + M.notify_silent = href_list["ringer"] != "1" + return 1 + else if(href_list["topic"]) + if(!M.current_room) + return 1 + + var/t = input("Enter new topic:", M.current_room, M.current_room.topic) as text|null + spawn() + if(!t || !M.check_messaging_available() || !P.pda.can_use()) + return + t = sanitize(copytext(t, 1, MAX_MESSAGE_LEN)) + t = readd_quotes(t) + if (!t) + return + + M.current_room.topic = t + M.current_room.announce(M, "Topic has been changed to '[t]' by [P.pda.owner].") + return 1 + else if(href_list["select"]) + var/s = href_list["select"] + if(s == "*NONE*") + M.current_room = null + else + var/datum/chatroom/CR = locate(s) + if(istype(CR)) + if(!(M in CR.users)) + if(!CR.login(M)) + return + M.current_room = CR + return 1 + else if(href_list["target"]) + if(P.silence_time) + return alert("Communications circuits remain uninitialized.") + + var/datum/chatroom/target = locate(href_list["target"]) + if(istype(target)) + if(!(M in target.users)) + if(!target.login(M)) + return + var/t = input("Please enter message", target) as text|null + spawn() + if(!t || !M.check_messaging_available()) + return + t = sanitize(copytext(t, 1, MAX_MESSAGE_LEN)) + t = readd_quotes(t) + if (!t || !P.pda.can_use()) + return + + target.post(M, t) + return 1 + else if(href_list["reconnect"]) + spawn() + M.messaging_available() + return 1 + /datum/pai_software/med_records name = "Medical Records" ram_cost = 15 diff --git a/code/modules/pda/ai.dm b/code/modules/pda/ai.dm index b1388512623..4ed82f69cf9 100644 --- a/code/modules/pda/ai.dm +++ b/code/modules/pda/ai.dm @@ -85,5 +85,13 @@ playsound(loc, 'sound/items/bikehorn.ogg', 30, 1) return -/obj/item/device/pda/ai/pai - ttone = "assist" \ No newline at end of file +/obj/item/device/pda/pai + icon_state = "NONE" + detonate = 0 + ttone = "assist" + +/obj/item/device/pda/pai/can_use() + var/mob/living/silicon/pai/pAI = usr + if(!istype(pAI)) + return 0 + return ..() && !pAI.silence_time \ No newline at end of file diff --git a/nano/templates/pai_chatroom.tmpl b/nano/templates/pai_chatroom.tmpl new file mode 100644 index 00000000000..d669a375d86 --- /dev/null +++ b/nano/templates/pai_chatroom.tmpl @@ -0,0 +1,76 @@ + + +
+
+ Receiver: +
+
+ {{if data.receiver_off}} + {{:helper.link("On", '', {"stopic":"chatroom", "toggler":1})}} + {{:helper.link("Off", '', {"stopic":"chatroom", "toggler":2}, 'selected')}} + {{else}} + {{:helper.link("On", '', {"stopic":"chatroom", "toggler":1}, 'selected')}} + {{:helper.link("Off", '', {"stopic":"chatroom", "toggler":2})}} + {{/if}} +
+
+ +
+
+ Ringer: +
+
+ {{if data.ringer_off}} + {{:helper.link("On", '', {"stopic":"chatroom", "ringer":1})}} + {{:helper.link("Off", '', {"stopic":"chatroom", "ringer":2}, 'selected')}} + {{else}} + {{:helper.link("On", '', {"stopic":"chatroom", "ringer":1}, 'selected')}} + {{:helper.link("Off", '', {"stopic":"chatroom", "ringer":2})}} + {{/if}} +
+
+ +{{for data.rooms}} +
+ {{:helper.link(value.name, '', {"stopic":"chatroom", "select":value.ref})}} + {{:helper.link("Quick Message", '', {"stopic":"chatroom", "target":value.ref})}} +
+{{/for}} +
+{{if data.disconnected}} +

Connection Lost

+ {{:helper.link("Reconnect", 'refresh', {"stopic":"chatroom", "reconnect":1})}} +{{else data.current_room}} +

#{{:data.current_room_name}}

+
+ Topic:
+
{{:helper.link(data.current_room_topic, '', {"stopic":"chatroom", "topic":1})}}
+ +
+
Users:
+
+ {{var firstUser = true;}} + {{for data.users}} + {{:firstUser ? "" : ", "}}{{:value}} + {{firstUser = false;}} + {{/for}} +
+
+ {{var prevName = "";}} + {{for data.messages}} +
+
{{:value.username!=prevName ? value.username : " "}}
+
+ {{:value.message}} +
+
+ {{prevName = value.username;}} + {{/for}} + {{:helper.link("Send Message", '', {"stopic":"chatroom", "target":data.current_room})}} +{{/if}} + +{{if data.current_name}} + {{:helper.link("Clear Screen", '', {"stopic":"chatroom", "select":"*NONE*"})}} +{{/if}} From 80c0f0ee1f04051e05a159f7e44d935feb7cc1bc Mon Sep 17 00:00:00 2001 From: Tastyfish Date: Wed, 30 Mar 2016 11:43:23 -0400 Subject: [PATCH 2/2] Make pai chatroom cost 5 --- code/modules/mob/living/silicon/pai/software_modules.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm index 813fc7a7fa5..1be45da5786 100644 --- a/code/modules/mob/living/silicon/pai/software_modules.dm +++ b/code/modules/mob/living/silicon/pai/software_modules.dm @@ -224,7 +224,7 @@ /datum/pai_software/chatroom name = "Digital Chatroom" - ram_cost = 3 + ram_cost = 5 id = "chatroom" toggle = 0