This is a read-only snapshot of the ComputerCraft forums, taken in April 2020.
mrpoopy345's profile picture

Expected string error

Started by mrpoopy345, 01 January 2014 - 05:45 PM
mrpoopy345 #1
Posted 01 January 2014 - 06:45 PM
Hello! I am making the cloud into computercraft, and I ran into a weird problem. When you try to login with any account, true or fake, the server errors, "startup:7:expected string" I am not sure if this is a problem with the client or server, so I will post both of their codes here. And by the way, do not tell me how bad the graphics are or how unfinished it is, it is a work in progress.
Server:

rednet.open("top")
while true do
id, msg = rednet.receive()
if msg == "login" then
id, user = rednet.receive()
id, pass = rednet.receive()
if fs.isDir(user) then
  h = fs.open(user.."/pass", "r")
  rpass = h.readAll()
  if pass == rpass then
   rednet.send(id, "true")
  else
   rednet.send(id, "false")
  end
else
  rednet.send(id, "falseuser")
end
elseif msg == "newuser" then
id, newuser = rednet.receive()
id, newpass = rednet.receive()
if fs.isDir(newuser) then
  rednet.send(id, "already")
else
  fs.makeDir(newuser)
  fs.copy("pass", newuser.."/pass")
  h = fs.open(newuser.."/pass", "w")
  h.write(newpass)
  h.close()
  fs.copy("programs", newuser.."/programs")
  rednet.send(id, "other")
  end
elseif msg == "needdata" then
id, user = rednet.receive()
h = fs.open(user.."/programs", "r")
one = h.readLine()
two = h.readLine()
tree = h.readLine()
four = h.readLine()
fve = h.readLine()
six = h.readLine()
even = h.readLine()
ate = h.readLine()
nine = h.readLine()
ten = h.readLine()
n = h.readLine()
rednet.send(id, one)
rednet.send(id, two)
rednet.send(id, tree)
rednet.send(id, four)
rednet.send(id, fve)
rednet.send(id, six)
rednet.send(id, even)
rednet.send(id, ate)
rednet.send(id, nine)
rednet.send(id, ten)
rednet.send(id, n)
end
end
Client:

rednet.open("top")
-- Login function
function login()
term.setCursorPos(27, 9)
local pass = read("*")
rednet.send(4, "login")
sleep(1)
rednet.send(4, user)
sleep(1)
rednet.send(4, pass)
id,msg = rednet.receive()
if msg == "true" then
cloud()
elseif msg == "falseuser" then
term.setBackgroundColor(colors.white)
term.clear()
term.setTextColor(colors.red)
term.setCursorPos(1, 2)
print("Unknown account. Would you like to create an account?")
term.setCursorPos(1, 4)
print("Type y or n")
term.setCursorPos(10, 5)
local y = read()
if y == "n" then
  os.reboot()
elseif y == "y" then
  makeuser()
end
elseif msg == "false" then
term.setBackgroundColor(colors.white)
term.setCursorPos(10, 2)
term.setTextColor(colors.red)
print("Unknown username or password.")
sleep(3)
os.reboot()
end
end
-- Startup screen function
function graphics()
term.setBackgroundColor(colors.white)
term.clear()
term.setTextColor(colors.lightBlue)
term.setCursorPos(20, 1)
print("iCloud")
term.setTextColor(colors.red)
term.setCursorPos(1,17)
print("Copyright iCloud Systems 2013")
print("Do not distribute")
term.setCursorPos(17, 7)
term.setTextColor(colors.yellow)
print("Username:")
term.setCursorPos(17, 9)
print("Password:")
term.setCursorPos(27, 7)
term.setBackgroundColor(colors.blue)
term.write("			")
term.setCursorPos(27, 9)
term.write("			")
term.setCursorPos(27, 7)
term.setTextColor(colors.orange)
end
--Make new user funtion
function makeuser()
term.setBackgroundColor(colors.white)
term.clear()
term.setTextColor(colors.lightBlue)
term.setCursorPos(20, 1)
print("iCloud")
term.setTextColor(colors.red)
term.setCursorPos(1,17)
print("Copyright iCloud Systems 2013")
print("Do not distribute")
term.setCursorPos(17, 7)
term.setTextColor(colors.yellow)
print("New Username:")
term.setCursorPos(17, 9)
print("New Password:")
term.setCursorPos(31, 7)
term.setBackgroundColor(colors.blue)
term.write("			")
term.setCursorPos(31, 9)
term.write("			")
term.setCursorPos(31, 7)
term.setTextColor(colors.orange)
local newuser = read()
term.setCursorPos(31,9)
local newpass = read("*")
rednet.send(4, "newuser")
rednet.send(4, newuser)
rednet.send(4, newpass)
id,msg = rednet.receive()
if msg == "already" then
term.setTextColor(colors.red)
term.setCursorPos(17, 2)
print("Account already made.")
sleep(2)
makeuser()
else
term.setTextColor(colors.red)
term.setCursorPos(17, 2)
print("User "..newuser.."Created Sucessfully!")
sleep(3)
graphics()
local user = read()
login()
end
end
--Startup screen
graphics()
--Login system
local user = read()
-- Cloud main screen
function cloud()
rednet.send(4, "needdata")
rednet.send(4, user)
id,programs = rednet.receive()
h = fs.open("list", "w")
h.write(programs)
h.close()
term.setBackgroundColor(colors.white)
term.setTextColor(colors.lightBlue)
term.clear()
term.setCursorPos(20,1)
print("iCloud")
term.setTextColor(colors.black)
term.setCursorPos(2, 3)
print("Press the plus button to add a program to your cloud.")
term.setCursorPos(2, 5)
print("Press the arrow to find and download your programs.")
term.setCursorPos(2, 7)
print("Press the C to share your programs and see community programs.")
term.setBackgroundColor(colors.green)
term.setCursorPos(10, 15)
term.write("  ")
term.setCursorPos(10, 14)
term.write("  ")
term.setCursorPos(10, 13)
term.write("  ")
term.setCursorPos(8, 14)
term.write("  ")
term.setCursorPos(12, 14)
term.write("  ")
term.setBackgroundColor(colors.blue)
term.setCursorPos(20, 14)
term.write("		")
term.setCursorPos(29, 14)
term.write(" ")
term.setCursorPos(28, 15)
term.write(" ")
term.setCursorPos(27, 16)
term.write(" ")
term.setCursorPos(28, 13)
term.write(" ")
term.setCursorPos(27, 12)
term.write(" ")
term.setBackgroundColor(colors.yellow)
term.setCursorPos(40, 11)
term.write("	   ")
term.setCursorPos(40, 12)
term.write(" ")
term.setCursorPos(40, 13)
term.write(" ")
term.setCursorPos(40, 14)
term.write(" ")
term.setCursorPos(40, 15)
term.write(" ")
term.setCursorPos(40, 16)
term.write(" ")
term.setCursorPos(40, 17)
term.write("		")
end
login()
CometWolf #2
Posted 01 January 2014 - 07:03 PM
It's quite obviously the top code, as sleep() wouldn't expect a string argument…
Check to make sure that directory actually exists prior to checking wether it's a directory or not. Use fs.exists(user).

Edit: looking at the other code, you haven't declared the user variable prior to sending it.
Edited on 01 January 2014 - 06:05 PM
sploders101 #3
Posted 03 January 2014 - 09:01 PM

rednet.send(4, user)
user is not declared, therefore it is a null data type instead of a string, try adding a

local user = read()
before the password one
Edited on 03 January 2014 - 08:02 PM
Imprivate #4
Posted 03 January 2014 - 09:16 PM
Also for efficiency, instead of doing:
one = h.readLine()
two = h.readLine()
tree = h.readLine()
rednet.send(id, one)
rednet.send(id, two)
rednet.send(id, tree)
etc…just use:
data = h.readAll()
rednet.send(id, data)
Then if you wanted to read say, line 3, you could do:
h.readLine()
h.readLine()
three = h.readLine()

Just a suggestion :)/>