SHOW:
|
|
- or go back to the newest paste.
1 | - | -- pastebin get zvV7Le0F ourchat |
1 | + | -- pastebin get NQVPiSWZ ourchat-rl |
2 | - | -- std pb zvV7Le0F ourchat |
2 | + | -- std pb NQVPiSWZ ourchat-rl |
3 | ||
4 | - | getChatURL = "http://minechat.x10host.com/index.php?true=true" |
4 | + | |
5 | - | postChatURL = "http://minechat.x10host.com/index.php?words=" |
5 | + | |
6 | scr_x, scr_y = term.getSize() | |
7 | ||
8 | - | tDisplay = {} |
8 | + | playerNames = {} --list of player names to keep track of nicknames |
9 | ||
10 | chat = peripheral.find("chatbox_admin") | |
11 | - | if tArg[1] then |
11 | + | if not chat then |
12 | - | playername = table.concat(tArg, " ") |
12 | + | chat = peripheral.find("chatbox") |
13 | - | else |
13 | + | if not chat then |
14 | - | term.clear() |
14 | + | chat = peripheral.find("chat_box") |
15 | - | term.setCursorPos(2,scr_y-2) |
15 | + | if not chat then |
16 | - | print("Enter your name:") |
16 | + | error("Requires a chatbox.") |
17 | - | repeat |
17 | + | |
18 | - | term.setCursorPos(2,scr_y-1) |
18 | + | |
19 | end | |
20 | - | write(">>") |
20 | + | |
21 | - | playername = read() |
21 | + | |
22 | - | until playername ~= "" |
22 | + | local a = http.post("http://minechat.x10host.com/index.php?words="..textutils.urlEncode(data)) |
23 | - | -- print(fs.getName(shell.getRunningProgram()) .. " <username>") |
23 | + | |
24 | - | -- return false |
24 | + | |
25 | ||
26 | commands = { | |
27 | ["me"] = function() | |
28 | - | local a = http.post(postChatURL..textutils.urlEncode(data)) |
28 | + | |
29 | send( "* "..playerNames[playername].." "..arg1 ) | |
30 | else | |
31 | chat.tell(playername, "/me <whatever>") | |
32 | end | |
33 | end, | |
34 | ["nick"] = function() | |
35 | - | send( "* "..playername.." "..arg1 ) |
35 | + | if not playerNames[playername] then |
36 | playerNames[playername] = playername | |
37 | - | putInDisplay("/me <whatever>") |
37 | + | |
38 | if string.len(arg1) > 0 then | |
39 | playerNames[playername] = "'"..arg1.."'" | |
40 | send( "* "..playerNames[playername].." is now known as "..arg1 ) | |
41 | else | |
42 | - | local sOldName = playername |
42 | + | chat.tell(playername, "/nick <newname>") |
43 | - | playername = arg1 |
43 | + | |
44 | - | send( "* "..sOldName.." is now known as "..playername ) |
44 | + | |
45 | ["help"] = function() | |
46 | - | putInDisplay("/nick <newname>") |
46 | + | chat.tell(playername, "Available commands:") |
47 | local sCommands = "*" | |
48 | for sCommand, fnCommand in pairs( commands ) do | |
49 | sCommands = sCommands .. " ##:" .. sCommand | |
50 | - | putInDisplay("Available commands:") |
50 | + | |
51 | chat.tell(playername, sCommands) | |
52 | end, | |
53 | - | sCommands = sCommands .. " /" .. sCommand |
53 | + | ["insult"] = function() --the insult command is a very useful utility in making children cry |
54 | insults = { | |
55 | - | putInDisplay( sCommands.." /logout" ) |
55 | + | |
56 | "USERNAME is fat and ugly and really, really stupid.", | |
57 | - | ["insult"] = function() |
57 | + | |
58 | "If USERNAME was admin...eh, I don't want to think of such things...", | |
59 | "No one is more pathetic than USERNAME.", | |
60 | "USERNAME is known to suck more than Kirby.", | |
61 | "USERNAME was the inspiration of Bubsy 3D.", | |
62 | "USERNAME's IQ is his age...times two!", | |
63 | "USERNAME's programming skills rival that of the Software Toolworks.", | |
64 | "Down with USERNAME, the killer of kings!", | |
65 | "USERNAME can go suck it!", | |
66 | "Stop being so adversarial, USERNAME!", | |
67 | "USERNAME cannot beat Air Man!", | |
68 | "USERNAME likes Daikatana and Bubsy.", | |
69 | "USERNAME is like King Midas, except with coagulated blood rather than gold.", | |
70 | "USERNAME's mother was a hampster, and his father smells of elderberry!", | |
71 | "Ni!", | |
72 | "USERNAME is a dishonorable Ferrengi p'tach!", | |
73 | "Pepperoni is too spicy for USERNAME.", | |
74 | } | |
75 | send(string.gsub(insults[math.random(1,#insults)],"USERNAME",arg1)) | |
76 | end, | |
77 | ["kill"] = function() --a useless command, I admit. But funny. | |
78 | if #arg1 < 1 then | |
79 | send(playerNames[playername].." was killed.") | |
80 | else | |
81 | - | ["kill"] = function() |
81 | + | |
82 | end | |
83 | - | send(playername.." was killed.") |
83 | + | |
84 | ["whois"] = function() | |
85 | local names = seperateMethods(playerNames) | |
86 | for a = 1, #names do | |
87 | if names[2] == "'"..arg1.."'" then | |
88 | chat.tell(playername, arg1.." is actually '"..names[2].."'") | |
89 | - | send(playername.."'s computer ID is "..os.getComputerID()..".") |
89 | + | break |
90 | end | |
91 | - | ["clear"] = function() |
91 | + | |
92 | - | send(string.rep(" ",(51*19))..playername.." cleared the screen.") |
92 | + | |
93 | ["id"] = function() | |
94 | - | ["exit"] = function() |
94 | + | send(playerNames[playername].." is not a computer.") |
95 | - | send(playername.." has left the chat") |
95 | + | |
96 | - | return true |
96 | + | |
97 | ||
98 | - | ["logout"] = function() |
98 | + | local function seperateMethods(input) |
99 | - | send(playername.." has left the chat") |
99 | + | |
100 | - | return true |
100 | + | |
101 | table.insert(output, {key,value}) | |
102 | end | |
103 | return output | |
104 | - | local function scrollClear(speed) |
104 | + | |
105 | - | scr_x, scr_y = term.getSize() |
105 | + | |
106 | - | for a = 1, scr_y/speed do |
106 | + | function b() |
107 | - | term.scroll(speed*speed) |
107 | + | |
108 | - | sleep(0) |
108 | + | ev, side, playername, mess = os.pullEvent("chat_message") |
109 | if not playerNames[playername] then | |
110 | playerNames[playername] = playername | |
111 | end | |
112 | - | function putInDisplay(text) |
112 | + | local sCommand = string.match( mess, ":([a-z]+)" ) |
113 | - | tDisplay[#tDisplay+1] = tostring(text) |
113 | + | |
114 | - | redraw = true |
114 | + | |
115 | - | return tostring(text) |
115 | + | |
116 | if string.find(mess," ") then | |
117 | arg1 = string.sub(mess,string.find(mess," ")+1) | |
118 | - | function seperateMethods(input) |
118 | + | ab = fnCommand(arg1) |
119 | else | |
120 | arg1 = "" | |
121 | ab = fnCommand() | |
122 | end | |
123 | if ab == true then | |
124 | return true | |
125 | end | |
126 | - | local function b() |
126 | + | |
127 | - | send(playername.." joined the chat!") |
127 | + | chat.tell(playername, "Bad command!") |
128 | end | |
129 | - | term.setCursorPos(1,scr_y) |
129 | + | |
130 | fullMess = "<"..playerNames[playername].."> "..mess | |
131 | - | write(":") |
131 | + | tMess[#tMess+1] = fullMess |
132 | - | mess = io.read() |
132 | + | send( fullMess ) |
133 | - | term.setCursorPos(1,scr_y-1) |
133 | + | |
134 | end | |
135 | - | local sCommand = string.match( mess, "^/([a-z]+)" ) |
135 | + | |
136 | ||
137 | function clearLines(top, bottom) | |
138 | for a = top, bottom do | |
139 | term.setCursorPos(1,a) | |
140 | term.clearLine() | |
141 | - | a = fnCommand(arg1) |
141 | + | |
142 | end | |
143 | ||
144 | - | a = fnCommand() |
144 | + | |
145 | while true do | |
146 | - | if a == true then |
146 | + | local b = http.post("http://minechat.x10host.com/index.php?true=true") |
147 | if b then | |
148 | b = b.readAll() | |
149 | else | |
150 | - | print("Bad command!") |
150 | + | error("Server not found. :(") |
151 | end | |
152 | if (b ~= tMess[#tMess]) and (b ~= fullMess) then | |
153 | - | send( "<"..playername.."> "..mess ) |
153 | + | tMess[#tMess+1] = b |
154 | chat.say(tMess[#tMess]) | |
155 | end | |
156 | end | |
157 | end | |
158 | - | local function clearLines(top, bottom) |
158 | + | |
159 | function showListofAllNames() | |
160 | while true do | |
161 | term.clear() | |
162 | term.setCursorPos(1,1) | |
163 | for a = 1, #tMess do | |
164 | print(tMess[a]) | |
165 | - | function chatPrint(log) |
165 | + | |
166 | - | if not type(log) == "table" then log = {log} end |
166 | + | repeat |
167 | - | local prevX, prevY = term.getCursorPos() |
167 | + | oldPlayerNames = playerNames |
168 | - | clearLines(1,scr_y-1) |
168 | + | sleep(0.5) |
169 | - | indent = 0 --in case any line is greater than the length of the screen |
169 | + | until oldPlayerNames ~= playerNames |
170 | - | indentIn = 0 --in the same case, mid writing |
170 | + | |
171 | - | for a = 1, #log do |
171 | + | |
172 | - | indent = indent + math.floor(#log[a]/scr_x) |
172 | + | |
173 | ||
174 | - | for a = 1, #log do |
174 | + | parallel.waitForAny(a, b, showListofAllNames) |
175 | - | for b = 0, math.floor(#log[a]/scr_x) do |
175 | + | |
176 | - | if b > 0 then indentIn = indentIn + 1 end |
176 | + | |
177 | - | term.setCursorPos(1,((((scr_y-1)+a-#log))-indent)+indentIn) |
177 | + |