From 314617ea6d74cb889b0f65a81363e3fd93653aa1 Mon Sep 17 00:00:00 2001 From: tkdrg Date: Sun, 26 Oct 2014 22:51:06 -0300 Subject: [PATCH 1/7] PDAs now have a Nanotransen Relay Chat client --- code/game/objects/items/devices/PDA/PDA.dm | 73 ++++++-- .../objects/items/devices/PDA/chatroom.dm | 172 ++++++++++++++++-- code/modules/client/client procs.dm | 1 + html/changelogs/Tkdrg-chatrooms.yml | 4 + 4 files changed, 227 insertions(+), 23 deletions(-) create mode 100644 html/changelogs/Tkdrg-chatrooms.yml diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 06a5fb632d6..3029f965bd4 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -44,6 +44,11 @@ var/global/list/obj/item/device/pda/PDAs = list() var/obj/item/device/paicard/pai = null // A slot for a personal AI device + var/datum/chatroom/chat_channel = "" //name of our current NTRC channel, without the # + var/datum/event/ntrc_event //our ntrc event trigger + var/nick = "" //our NTRC nick + var/list/ntrclog = list() //NTRC message log + /obj/item/device/pda/medical default_cartridge = /obj/item/weapon/cartridge/medical icon_state = "pda-medical" @@ -283,7 +288,7 @@ var/global/list/obj/item/device/pda/PDAs = list() dat += "" dat += "

" dat += "Messages:
[pda.tnote]" - return dat \ No newline at end of file + return dat + +/mob/living/silicon/pai/proc/chatroom() + + pda.mode = 5 + pda.attack_self() \ No newline at end of file From 571a0953b415e87ce7ffcfa908aec28bf47daca5 Mon Sep 17 00:00:00 2001 From: tkdrg Date: Wed, 29 Oct 2014 20:17:16 -0300 Subject: [PATCH 5/7] Fixes chatroom runtime (thanks Gun Hog!), auto-adds # if the channel does not contain it already, obsoletes /new (its functionality is now included in /join) --- code/game/objects/items/devices/PDA/chatroom.dm | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/code/game/objects/items/devices/PDA/chatroom.dm b/code/game/objects/items/devices/PDA/chatroom.dm index 5451314d326..a2d050d40a9 100644 --- a/code/game/objects/items/devices/PDA/chatroom.dm +++ b/code/game/objects/items/devices/PDA/chatroom.dm @@ -96,8 +96,6 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom) return register_auth(client,nick,cmd[2]) if("mute") return mute_nick(client,nick,cmd[2]) - if("new") - return new_channel(client,nick,cmd[2]) if("pass") return new_pass(client,nick,cmd[2]) @@ -140,6 +138,8 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom) return 0 /datum/chatroom/proc/channel_join(client,nick,channel) //join + if(!dd_hasprefix(channel,"#")) + channel = "#" + channel if(channel == name) if(nick in banned || nick in users) return 0 @@ -148,6 +148,10 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom) evlist[nick] = events.addEvent("msg_chat",client,"msg_chat") return 1 else + if(!(channel in chatchannels)) + var/ret = new_channel(client,nick,channel) + if(!ret) + return 0 channel_part(client,nick) var/datum/chatroom/C = chatchannels[channel] return C.parse_msg(client,nick,"/join [channel]") @@ -219,9 +223,10 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom) return 1 return 0 -/datum/chatroom/proc/new_channel(client,nick,target) //new - if(!(target in chatchannels)) - chatchannels[target] = new /datum/chatroom() +/datum/chatroom/proc/new_channel(client,nick,target) //called by join + if(target in chatchannels) + return 0 + chatchannels[target] = new /datum/chatroom() var/datum/chatroom/C = chatchannels[target] C.name = target C.operators += nick From cc96d09843283b5bf0b09ce3490c4e2ed31b2d63 Mon Sep 17 00:00:00 2001 From: tkdrg Date: Wed, 29 Oct 2014 20:47:07 -0300 Subject: [PATCH 6/7] Adds NTRC help screen, fixes PDA /join bug that let you join multiple times without updating chat_channel --- code/game/objects/items/devices/PDA/PDA.dm | 18 +++++++++++++++++- .../game/objects/items/devices/PDA/chatroom.dm | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 4f593f760c6..1c1a1ec9966 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -450,7 +450,8 @@ var/global/list/obj/item/device/pda/PDAs = list() dat += "[nick] | " dat += "[chat_channel] | " - dat += "Write message
" + dat += "Write message | " + dat += "Help
" if(chat_channel) dat += ntrclog[chat_channel] @@ -651,6 +652,21 @@ var/global/list/obj/item/device/pda/PDAs = list() ntrclog[chat_channel] = "[ret]
" + ntrclog[chat_channel] else if(ret == 0) ntrclog[chat_channel] = "Failure
" + ntrclog[chat_channel] + var/list/lt = text2list(t) + if(lt[1] == "/join") + chat_channel = lt[2] + + if("NTRC Help") + var/helptext = "NTRC reference:

" + helptext += "General commands
" + helptext += "/join #channel
/part
/who
/topic
/register password
/auth password

" + helptext += "Moderation commands
" + helptext += "/ban targetnick
/unban targetnick
/kick targetnick
/mute targetnick

" + helptext += "Management commands
" + helptext += "/topic topictext
/opself channelpassword
/pass newchannelpassword
/op targetnick
" + helptext += "/deop targetnick
/del WARNING: DELETES THE CHANNEL" + usr << browse(helptext, "window=ntrchelp;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0") + //SYNDICATE FUNCTIONS=================================== diff --git a/code/game/objects/items/devices/PDA/chatroom.dm b/code/game/objects/items/devices/PDA/chatroom.dm index a2d050d40a9..1431bf81a22 100644 --- a/code/game/objects/items/devices/PDA/chatroom.dm +++ b/code/game/objects/items/devices/PDA/chatroom.dm @@ -141,7 +141,7 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom) if(!dd_hasprefix(channel,"#")) channel = "#" + channel if(channel == name) - if(nick in banned || nick in users) + if((nick in banned) || (nick in users)) return 0 users += nick get_topic(client,nick) From 7db4f1f9a245817a21bb3acb7c9cac3968294971 Mon Sep 17 00:00:00 2001 From: tkdrg Date: Wed, 29 Oct 2014 23:00:23 -0300 Subject: [PATCH 7/7] Fixes chat channel bugs, removes PDA authentication because apparently our players are too dumb to not share passwords between ss13 and banking accounts --- code/game/objects/items/devices/PDA/PDA.dm | 31 +++++----- .../objects/items/devices/PDA/chatroom.dm | 59 +++++-------------- 2 files changed, 33 insertions(+), 57 deletions(-) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 1c1a1ec9966..7b075ba210f 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -45,11 +45,10 @@ var/global/list/obj/item/device/pda/PDAs = list() var/obj/item/device/paicard/pai = null // A slot for a personal AI device var/chat_channel = "#ss13" //name of our current NTRC channel - var/datum/event/ntrc_event //our ntrc event trigger var/nick = "" //our NTRC nick var/list/ntrclog = list() //NTRC message log - var/noreturn = 0 //whether the PDA can use the Return button, used for the aiPDA + var/noreturn = 0 //whether the PDA can use the Return button, used for the aiPDA chatroom /obj/item/device/pda/medical default_cartridge = /obj/item/weapon/cartridge/medical @@ -635,36 +634,40 @@ var/global/list/obj/item/device/pda/PDAs = list() if("Set Channel") var/t = stripped_input(U, "Please enter channel", name, (chat_channel)) as text - if(t && t in chatchannels) + if(t) ntrclog[chat_channel] = "
" + ntrclog[chat_channel] var/datum/chatroom/C = chatchannels[chat_channel] + if(!findtext(t,"#",1,2)) + t = "#" + t chat_channel = t - var/ret = C.parse_msg(src, nick, "/join [chat_channel]") - if(ret == "ERR_AUTH") - ntrclog[chat_channel] = "Please use /auth password to authenticate and then join again." + ntrclog[chat_channel] + C.parse_msg(src, nick, "/join [chat_channel]") if("NTRC Message") var/t = msg_input(U) as text var/datum/chatroom/C = chatchannels[chat_channel] if(C) + var/lt = text2list(t, " ") + if(lt[1] == "/join") + if(!findtext(lt[2],"#",1,2)) + lt[2] = "#" + lt[2] var/ret = C.parse_msg(src,nick,t) if(findtextEx(ret,"ERR_",1,5)) ntrclog[chat_channel] = "[ret]
" + ntrclog[chat_channel] - else if(ret == 0) - ntrclog[chat_channel] = "Failure
" + ntrclog[chat_channel] - var/list/lt = text2list(t) - if(lt[1] == "/join") - chat_channel = lt[2] + else + if(ret == 0) + ntrclog[chat_channel] = "Failure
" + ntrclog[chat_channel] + else + if(lt[1] == "/join") + chat_channel = lt[2] if("NTRC Help") var/helptext = "NTRC reference:

" helptext += "General commands
" - helptext += "/join #channel
/part
/who
/topic
/register password
/auth password

" + helptext += "/join #channel
/part
/log amountoflines
/who
/topic
/register

" helptext += "Moderation commands
" helptext += "/ban targetnick
/unban targetnick
/kick targetnick
/mute targetnick

" helptext += "Management commands
" - helptext += "/topic topictext
/opself channelpassword
/pass newchannelpassword
/op targetnick
" - helptext += "/deop targetnick
/del WARNING: DELETES THE CHANNEL" + helptext += "/topic topictext
/op targetnick
/deop targetnick
/delchannel" usr << browse(helptext, "window=ntrchelp;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0") diff --git a/code/game/objects/items/devices/PDA/chatroom.dm b/code/game/objects/items/devices/PDA/chatroom.dm index 1431bf81a22..1ba6a4c5813 100644 --- a/code/game/objects/items/devices/PDA/chatroom.dm +++ b/code/game/objects/items/devices/PDA/chatroom.dm @@ -6,21 +6,16 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom) /datum/chatroom var/name = "#ss13" - var/channelpassword = "" - var/topic = "Welcome to #ss13! The best NTRC channel in this sector of the galaxy!" // topic message for the chatroom + var/topic = "Welcome to the best NTRC channel in this sector of the galaxy!" // topic message for the chatroom var/list/operators = list() // chat operators var/list/logs = list() // chat logs var/list/muted = list() // muted users var/list/banned = list() // banned users var/list/auth = list() // authenticated clients - var/list/pass = list() // user passwords var/list/users = list() // current users var/datum/events/events = new () var/list/datum/event/evlist = list() -/datum/chatroom/New() - channelpassword = rand() - //parse_msg() is the exposed interface chat //clients should interact with parse_msg() and parse_msg() only @@ -55,9 +50,6 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom) /datum/chatroom/proc/handle_command(client,nick,command) //command parser var/list/cmd=text2list(command, " ") - if(cmd[1] == "auth" && cmd.len > 1) //parsed here to avoid triggering ERR_AUTH - return attempt_auth(client,nick,cmd[2]) - if(!get_auth(client,nick)) return "ERR_AUTH" @@ -69,10 +61,12 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom) return set_topic(client,nick,cmd[2]) if("part") return channel_part(client,nick) - if("del") + if("delchannel") return delete_channel(client,nick) if("who") return get_who(client, nick) + if("register") + return register_auth(client,nick) if(cmd.len == 1) return "ERR_ARGS" @@ -80,8 +74,8 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom) switch(cmd[1]) //commands with 1 arg if("join") return channel_join(client,nick,cmd[2]) - if("opself") - return operator_auth(client,nick,cmd[2]) + if("log") + return get_log(client,nick,cmd[2]) if("op") return make_op(client,nick,cmd[2]) if("deop") @@ -92,12 +86,8 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom) return unban(client,nick,cmd[2]) if("kick") return kick(client,nick,cmd[2]) - if("register") - return register_auth(client,nick,cmd[2]) if("mute") return mute_nick(client,nick,cmd[2]) - if("pass") - return new_pass(client,nick,cmd[2]) return "ERR_WCMD" @@ -112,24 +102,18 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom) return 1 /datum/chatroom/proc/get_auth(client,nick) //check auth - if(!pass[nick] || (auth[nick] == client)) + if((!(nick in auth)) || (auth[nick] == client)) return 1 return 0 //chat commands go here -/datum/chatroom/proc/attempt_auth(client,nick,password) //auth - if(pass[nick] == password) - auth[nick] = client - return 1 - return 0 - -/datum/chatroom/proc/register_auth(client,nick,password) //register - if(pass[nick] && (get_auth(client,nick) != client)) +/datum/chatroom/proc/register_auth(client,nick) //register + if(!get_auth(client,nick)) return 0 - pass[nick] = password + auth[nick] = client return 1 -/datum/chatroom/proc/delete_channel(client,nick) //delete +/datum/chatroom/proc/delete_channel(client,nick) //delchannel if(nick in operators) for(var/event in events.events) events.clearEvent("msg_chat",event) @@ -138,7 +122,7 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom) return 0 /datum/chatroom/proc/channel_join(client,nick,channel) //join - if(!dd_hasprefix(channel,"#")) + if(!findtext(channel,"#",1,2)) channel = "#" + channel if(channel == name) if((nick in banned) || (nick in users)) @@ -161,12 +145,6 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom) events.clearEvent("msg_chat",evlist[nick]) return 1 -/datum/chatroom/proc/operator_auth(client,nick,pass) //opself - if(pass == channelpassword) - operators += nick - return 1 - return 0 - /datum/chatroom/proc/make_op(client,nick,target) //op if(nick in operators) operators += target @@ -204,17 +182,18 @@ var/list/chatchannels = list(default_ntrc_chatroom.name = default_ntrc_chatroom) return 0 /datum/chatroom/proc/get_topic(client,nick) //topic - call(client,"msg_chat")(name,"NTbot",topic) + call(client,"msg_chat")(name,"NTbot","TOPIC: [topic]") return 1 /datum/chatroom/proc/get_who(client,nick) //who for(var/user in users) - call(client,"msg_chat")(name,"NTbot",user) + call(client,"msg_chat")(name,"NTbot","WHO: [user]") return 1 /datum/chatroom/proc/get_log(client,nick,lines) //log for(var/i=0;i