diff --git a/.gitignore b/.gitignore index 9177790..466e840 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ changes *.rsc *.int *.lk +Chatters.zip data/saves/logs data/saves/channels packet diff --git a/Chatters.dme b/Chatters.dme index a5a2efa..98e6f57 100644 --- a/Chatters.dme +++ b/Chatters.dme @@ -6,6 +6,126 @@ // END_INTERNALS // BEGIN_FILE_DIR #define FILE_DIR . +#define FILE_DIR ".git" +#define FILE_DIR ".git/hooks" +#define FILE_DIR ".git/info" +#define FILE_DIR ".git/logs" +#define FILE_DIR ".git/logs/refs" +#define FILE_DIR ".git/logs/refs/heads" +#define FILE_DIR ".git/logs/refs/remotes" +#define FILE_DIR ".git/logs/refs/remotes/origin" +#define FILE_DIR ".git/objects" +#define FILE_DIR ".git/objects/02" +#define FILE_DIR ".git/objects/05" +#define FILE_DIR ".git/objects/08" +#define FILE_DIR ".git/objects/10" +#define FILE_DIR ".git/objects/12" +#define FILE_DIR ".git/objects/14" +#define FILE_DIR ".git/objects/17" +#define FILE_DIR ".git/objects/18" +#define FILE_DIR ".git/objects/1b" +#define FILE_DIR ".git/objects/1c" +#define FILE_DIR ".git/objects/1f" +#define FILE_DIR ".git/objects/25" +#define FILE_DIR ".git/objects/28" +#define FILE_DIR ".git/objects/29" +#define FILE_DIR ".git/objects/38" +#define FILE_DIR ".git/objects/3a" +#define FILE_DIR ".git/objects/3b" +#define FILE_DIR ".git/objects/40" +#define FILE_DIR ".git/objects/46" +#define FILE_DIR ".git/objects/4a" +#define FILE_DIR ".git/objects/4c" +#define FILE_DIR ".git/objects/50" +#define FILE_DIR ".git/objects/56" +#define FILE_DIR ".git/objects/5c" +#define FILE_DIR ".git/objects/5d" +#define FILE_DIR ".git/objects/5e" +#define FILE_DIR ".git/objects/65" +#define FILE_DIR ".git/objects/6b" +#define FILE_DIR ".git/objects/6f" +#define FILE_DIR ".git/objects/76" +#define FILE_DIR ".git/objects/78" +#define FILE_DIR ".git/objects/79" +#define FILE_DIR ".git/objects/80" +#define FILE_DIR ".git/objects/88" +#define FILE_DIR ".git/objects/92" +#define FILE_DIR ".git/objects/9d" +#define FILE_DIR ".git/objects/a2" +#define FILE_DIR ".git/objects/ac" +#define FILE_DIR ".git/objects/b2" +#define FILE_DIR ".git/objects/b7" +#define FILE_DIR ".git/objects/c1" +#define FILE_DIR ".git/objects/ce" +#define FILE_DIR ".git/objects/db" +#define FILE_DIR ".git/objects/de" +#define FILE_DIR ".git/objects/e1" +#define FILE_DIR ".git/objects/e9" +#define FILE_DIR ".git/objects/ea" +#define FILE_DIR ".git/objects/f0" +#define FILE_DIR ".git/objects/pack" +#define FILE_DIR ".git/refs" +#define FILE_DIR ".git/refs/heads" +#define FILE_DIR "code" +#define FILE_DIR "code/controllers" +#define FILE_DIR "code/controllers/managers" +#define FILE_DIR "code/libraries" +#define FILE_DIR "code/libraries/rc5" +#define FILE_DIR "code/libraries/s_smiley" +#define FILE_DIR "code/libraries/swapmaps" +#define FILE_DIR "code/libraries/syntaxhighlighter" +#define FILE_DIR "code/libraries/test" +#define FILE_DIR "code/libraries/texthandling" +#define FILE_DIR "code/libraries/xml" +#define FILE_DIR "code/libraries/zipfile" +#define FILE_DIR "code/models" +#define FILE_DIR "code/models/chatter" +#define FILE_DIR "code/models/painter" +#define FILE_DIR "code/views" +#define FILE_DIR "code/views/color" +#define FILE_DIR "code/views/games" +#define FILE_DIR "code/views/help" +#define FILE_DIR "code/views/open_chan" +#define FILE_DIR "code/views/ops" +#define FILE_DIR "code/views/paint" +#define FILE_DIR "code/views/set" +#define FILE_DIR "code/views/set/style" +#define FILE_DIR "data" +#define FILE_DIR "data/saves" +#define FILE_DIR "data/saves/channels" +#define FILE_DIR "data/saves/logs" +#define FILE_DIR "data/sndfx" +#define FILE_DIR "data/xml" +#define FILE_DIR "data/xml/help" +#define FILE_DIR "data/xml/help/topics" +#define FILE_DIR "data/xml/help/topics/1" +#define FILE_DIR "data/xml/help/topics/1/1" +#define FILE_DIR "data/xml/help/topics/1/2" +#define FILE_DIR "data/xml/help/topics/4" +#define FILE_DIR "data/xml/help/topics/4/2" +#define FILE_DIR "data/xml/help/topics/4/3" +#define FILE_DIR "data/xml/help/topics/4/3/1" +#define FILE_DIR "data/xml/help/topics/4/3/4" +#define FILE_DIR "data/xml/help/topics/4/8" +#define FILE_DIR "data/xml/help/topics/5" +#define FILE_DIR "data/xml/ops" +#define FILE_DIR "data/xml/ops/privileges" +#define FILE_DIR "data/xml/ops/ranks" +#define FILE_DIR "data/xml/quotes" +#define FILE_DIR "resources" +#define FILE_DIR "resources/icons" +#define FILE_DIR "resources/icons/atoms" +#define FILE_DIR "resources/icons/paint" +#define FILE_DIR "resources/icons/smileys" +#define FILE_DIR "resources/images" +#define FILE_DIR "resources/images/hangman" +#define FILE_DIR "resources/images/interface" +#define FILE_DIR "resources/images/interface/arrows" +#define FILE_DIR "resources/images/interface/locks" +#define FILE_DIR "resources/images/menu" +#define FILE_DIR "resources/images/smileys" +#define FILE_DIR "resources/maps" +#define FILE_DIR "resources/notes" // END_FILE_DIR #define FILE_DIR "resources" diff --git a/code/_global.dm b/code/_global.dm index bf67a99..1b1035c 100644 --- a/code/_global.dm +++ b/code/_global.dm @@ -53,9 +53,6 @@ // File Size Limit #define MAX_FILE_SIZE 5242880 // 5 Megabytes -// telnet echo ON -#define VERBOSE 1 - // Used to enable debugging output with debug() #define DEV_DEBUG diff --git a/code/client.dm b/code/client.dm index cad8988..9d46eee 100644 --- a/code/client.dm +++ b/code/client.dm @@ -13,19 +13,15 @@ client Command(command) - if(ChatMan.istelnet(key) && VERBOSE) //verbose - src << "[command]" - - var pos = findtext(command, " ") - var cmd = copytext(command, 1, pos) - var params - if(pos) params = copytext(command, pos + 1) - for(var/v in mob.verbs) - if(ckey(cmd) == ckey(v:name)) - call(mob, v:name)(params) - ..(command) - - verb - who() - var /mob/chatter/c = mob - c.Chan.UpdateWho() \ No newline at end of file + var/success=0 + if(findtext(command,"/",1,2)) + var/pos = findtext(command, " ") + var/cmd = copytext(command, 2, pos) + var/params + if(pos) params = copytext(command, pos + 1) + for(var/v in mob.verbs) + if(ckey(cmd) == ckey(v:name)) + call(mob, v:name)(params) + success=1 + if(!success) call(mob, "Say")(command) + ..(command) \ No newline at end of file diff --git a/code/controllers/managers/gameman.dm b/code/controllers/managers/gameman.dm index 2cce34b..0893b7a 100644 --- a/code/controllers/managers/gameman.dm +++ b/code/controllers/managers/gameman.dm @@ -23,22 +23,12 @@ GameManager UpdateWho(Channel/Chan) if(!Chan || !Chan.players || !Chan.players.len) return - //telnet update who - var chatter_array[] = list() - for(var/mob/chatter/C in Chan.players) - chatter_array += "[dd_replacetext(C.name, " ", "+")][C.afk ? "~" : ""]" - var display = dd_list2text(chatter_array, ",") - - for(var/mob/chatter/C in Chan.players) var/players = 0 var/idle = 0 - if(ChatMan.istelnet(C.key)) - C << ".who [display]" - - else + if(!ChatMan.istelnet(C.key)) for(var/i=1, i<=Chan.players.len, i++) var/mob/chatter/c = Chan.players[i] if(C.client) winset(C, "games_who.grid", "current-cell=1,[i]") diff --git a/code/models/channel.dm b/code/models/channel.dm index 8567599..5e7ca66 100644 --- a/code/models/channel.dm +++ b/code/models/channel.dm @@ -1,4 +1,3 @@ - Channel var founder @@ -187,20 +186,22 @@ Channel if(C.show_title) if(C.show_colors) C << output({"[TextMan.fadetext("##########################################",list("000000000","255000000","255255255"))] -[world.name] - Created by Xooxerand the BYOND Community +[world.name] - Created by Xooxer +and the BYOND Community [TextMan.fadetext("Still the greatest chat program on BYOND!", list("102000000","255000000","102000000","000000000","000000255"))] Source available on the Chatters Repository. -Copyright © 2008 Andrew "Xooxer" Arnold +Copyright � 2008 Andrew "Xooxer" Arnold [TextMan.fadetext("##########################################",list("000000000","255000000","255255255"))] - All Rights Reserved - "}, "[ckey(name)].chat.default_output") else C << output({"########################################## -[world.name] - Created by Xooxerand the BYOND Community +[world.name] - Created by Xooxer +and the BYOND Community Still the greatest chat program on BYOND! Source available on the Chatters Repository. -Copyright © 2008 Andrew "Xooxer" Arnold +Copyright � 2008 Andrew "Xooxer" Arnold ########################################## - All Rights Reserved - "}, "[ckey(name)].chat.default_output") @@ -257,21 +258,11 @@ Channel UpdateWho() - //telnet update who - var chatter_array[] = list() - for(var/mob/chatter/C in chatters) - chatter_array += "[dd_replacetext(C.name, " ", "+")][C.afk ? "~" : ""]" - var display = dd_list2text(chatter_array, ",") - - for(var/mob/chatter/C in chatters) var/active = chatters.len - if(ChatMan.istelnet(C.key)) - C << ".who [display]" - - else + if(!ChatMan.istelnet(C.key)) for(var/i=1, i<=chatters.len, i++) var/mob/chatter/c = chatters[i] if(isnull(c)) @@ -351,7 +342,7 @@ Channel if(c.ignoring(C) & CHAT_IGNORE) continue var/message if(!c.filter) - message = msg + message = raw_msg if(c.show_smileys && !(c.ignoring(C) & SMILEY_IGNORE)) message = TextMan.ParseSmileys(raw_msg) message = TextMan.ParseLinks(message) message = TextMan.ParseTags(message, c.show_colors, c.show_highlight,0) @@ -479,11 +470,11 @@ Channel for(var/mob/chatter/c in chatters) if(!(c.ignoring(C) & CHAT_IGNORE)) if(!c.filter) - c << output("[c.ParseTime()] [C.name] is now AFK. (Reason: [raw_msg])", "[ckey(name)].chat.default_output") + c << output("[c.ParseTime()] [c.show_colors ? "[C.name]" : "[C.name]"] is now AFK. (Reason: [raw_msg])", "[ckey(name)].chat.default_output") else if(c.filter == 1) - c << output("[c.ParseTime()] [C.name] is now AFK. (Reason: [TextMan.FilterChat(raw_msg,c)])", "[ckey(name)].chat.default_output") + c << output("[c.ParseTime()] [c.show_colors ? "[C.name]" : "[C.name]"] is now AFK. (Reason: [TextMan.FilterChat(raw_msg,c)])", "[ckey(name)].chat.default_output") else - c << output("[c.ParseTime()] [C.name] is now AFK. (Reason: [msg])", "[ckey(name)].chat.default_output") + c << output("[c.ParseTime()] [c.show_colors ? "[C.name]" : "[C.name]"] is now AFK. (Reason: [msg])", "[ckey(name)].chat.default_output") C << output("Your activity status is now set to Away From Keyboard.", "[ckey(name)].chat.default_output") diff --git a/code/models/chatter/commands.dm b/code/models/chatter/commands.dm index 86f8138..adb0bb5 100644 --- a/code/models/chatter/commands.dm +++ b/code/models/chatter/commands.dm @@ -1,4 +1,3 @@ - mob chatter verb @@ -30,6 +29,7 @@ mob if("unban") voteUnban (privilege, Rank, target) Send(target as text|null|mob in Home.chatters, file as file|null) + if(telnet) return if(!target) target = input("Who would you like to send a file to?", "Send File") as text|null if(!target) return @@ -64,34 +64,27 @@ mob C.Ignore(name,"files") alert("File ([file]) rejected by [C.name].","File Transfer Failed") - login(telnet_key as text|null) - set hidden = 1 - if(!telnet_key) return - if(!telnet) return - var/savefile/S = new("./data/saves/tel.net") - if(!S || !length(S)) return - var/list/L = new - S["telnet"] >> L - if(!L || !L.len) return - var/key_hash = md5(telnet_key) - if(key_hash in L) - var/telnet_pass = input("Please enter your telnet password:", "Telnet Key Login") as password|null - if(!telnet_pass) - del(L) - return - if(L[key_hash] != md5(telnet_pass)) - del(L) - return - del(L) - name = telnet_key - fade_name = name - Home.UpdateWho() - Set() + if(telnet) return call(usr, "ShowSet")() Help() - ShowHelp() + if(!telnet) ShowHelp() + else + src << {"//--------------------Help--------------------\\ +All input is, by default, parsed into the chat. Input preceded by a backslash (/), up to the first space, will be interpreted as a command. If none is found, it shall be parsed into the chat. + +Valid Commands: +Login name - Attempts to login as \[name\]. +Say message - Sends message to chat. +Me/My emote - Emotes: "\[Name\] \[emote\]!" / "\[Name\]'s \[emote\]!" +Who - Displays list of current chatters. +Fiter state - Toggles the swearing filter. Valid states: on, off, 1, 0. All others simply toggle the filter. +Ignore/Unignore chatter - Ignore or stop ignoring specified chatter. +Ignoring - Displays list of ignored chatters. +Look - Displays information about the room. +\\---------------------------------------------// +"} Cmail() //ShowChattersMail() @@ -120,6 +113,7 @@ mob Chan.My(src, msg) IM(target as text|null|mob in Home.chatters, msg as text|null) + if(telnet) return if(!target) var/Messenger/im = new(src) im.Display(src) @@ -501,7 +495,7 @@ mob LookAt(t as text|null|mob in Home.chatters) - if(!t) return + if(!t || telnet) return var/mob/chatter/C if(ismob(t)) C = t else C = ChatMan.Get(t) @@ -528,6 +522,7 @@ mob winset(src, "profile.im_button", "command='IM \"[C.name]\"';") ShowCode(t as text|null|mob in Home.chatters) + if(telnet) return if(afk) ReturnAFK() var/showcode_snippet/S = new if(t) @@ -557,8 +552,8 @@ mob S.Send(1) ShowText(t as text|null|mob in Home.chatters) + if(telnet) return if(afk) ReturnAFK() - var/showcode_snippet/S = new if(t) var/mob/chatter/C @@ -587,9 +582,56 @@ mob S.Send() afk(msg as text|null) - if(!Chan) return + if(!Chan || telnet) return if(!afk) if(!msg) msg = auto_reason Home.GoAFK(src, msg) else ReturnAFK() + Filter(msg as text|null) + switch(ckey(msg)) + if("on","1") filter=2 + if("off","0") filter=0 + else filter=(!filter && 2) + src << "Filter is now [filter ? "on" : "off"]." + + who() + set hidden = 1 + if(!telnet) return + var chatter_array[] = list() + for(var/mob/chatter/C in Home.chatters) + chatter_array += "[C.name][C.afk ? "\[AFK\]" : ""]" + src << "Chatters: [dd_list2text(chatter_array, ", ")]" + + login(telnet_key as text|null) + set hidden = 1 + if(!telnet_key || !telnet) return + for(var/mob/chatter/C in Home.chatters) + if((C.key && C.key==telnet_key) || C.name==telnet_key) + src << "Error: That key is already logged in!" + return + var/savefile/S = new("./data/saves/tel.net") + if(!S || !length(S)) + src << "Error: There is no password saved for that key!" + return + var/list/L = new + S["telnet"] >> L + if(!L || !L.len) + src << "Error: There is no password saved for that key!" + return + var/key_hash = md5(telnet_key) + if(key_hash in L) + var/telnet_pass = input("Please enter your telnet password:", "Telnet Key Login") as password|null + if(!telnet_pass) + del(L) + return + if(L[key_hash] != md5(telnet_pass)) + src << "Error: Incorrect password!" + del(L) + return + del(L) + src << "You have successfully logged in as telnet_key!" + name = telnet_key + fade_name = name + Home.UpdateWho() + else src << "Error: There is no password saved for that key!"