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!"