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

Function Call Error

Started by kaioo1312, 27 October 2013 - 04:48 PM
kaioo1312 #1
Posted 27 October 2013 - 05:48 PM
I wrote this program and when i go through it all (username=kai pass=nuke then enter rednet) it says 'defcon:188: attempt to call string'. I have looked at it and tried all i can and it wont work.

Code:

Spoiler

x=5
	--Inital Screen
	function drawScreen()
	shell.run("draw")
	sleep(0.75)
	term.clear()
	term.setBackgroundColor(colors.white)
	term.setTextColor(colors.red)
	end
  
	function drawLoginBox()
	term.setTextColor(colors.black)
	term.setCursorPos(9,2)
	print("  ----------------------------------  ")
	term.setCursorPos(9,3)
	print(" |								  | ")
	term.setCursorPos(9,4)
	print(" |								  | ")
	term.setCursorPos(9,5)
	print(" |								  | ")
	term.setCursorPos(9,6)
	print(" |								  | ")
	term.setCursorPos(9,7)
	print("  ----------------------------------  ")
	end
  
	function drawLoginText()
	term.setCursorPos(12,4)
	print("Username:")
	term.setCursorPos(12,6)
	print("Password:")
	end
  
	function usernameInput()
	term.setCursorPos(22,4)
	input=read()
	 if input == ("kai") then
	 passwordInput()
	  elseif input == ("kaioo") then
	  passwordInput()
	  elseif input == ("kaioo132") then
	  passwordInput()
	  else
	  term.clear()
	  term.setCursorPos(1,1)
	  print("Username Incorrect")
	  sleep(0.75)
	  term.clear()
	  drawLoginBox()
	  drawLoginText()
	  usernameInput()
	  end
	 end
  
	function passwordInput()
	term.setCursorPos(22,6)
	input=read("*")
	 if input == ("nuke") then
	 term.clear()
	  else
	  term.clear()
	  term.setCursorPos(1,1)
	  print("Password Incorrect")
	  sleep(0.75)
	  term.clear()
	  term.setCursorPos(21,4)
	  term.setTextColor(colors.black)
	  print("kai")
	  drawLoginBox()
	  drawLoginText()
	  term.setCursorPos(21,4)
	  print("kai")
	  passwordInput()
	  end
	 end
  
	function warning()
	shell.run("clear")
	print("Warning! This program is illegal to run")
	print("on unautharized pc's. This is a system")
	print("designed for Blue Task (R). Press the")
	print("F1 key to continue.")
	 while true do
	 event,p1 = os.pullEvent()
	  if (event=="key") and (p1==59) then
	  defcon2()
	   end
	 end
	end
	--Inital Screen End
	--Defcon Determine
  
	function defconDetermine()
	term.setBackgroundColor(colors.white)
	term.clear()
	term.setBackgroundColor(colors.white)
	term.setTextColor(7)
	 if fs.exists("defcon5") then
	 print("You are at Defcon 5")
	 elseif fs.isDir("defcon4") then
	 print("You are at Defcon 4")
	 x=x-1
	 elseif fs.isDir("defcon3") then
	 print("You are at Defcon 3")
	 x=x-2
	 elseif fs.isDir("defcon2") then
	 print("You are at Defcon 2")
	 x=x-3
	 elseif fs.isDir("defcon1") then
	 print("You are at Defcon 1")
	 x=x-4
	 else
	 print("You are at Defcon 5")
	 fs.makeDir("defcon5")
	  end
	end
	--Defcon Determine End--
	--API--
	function r()
	term.setBackgroundColor(colors.white)
	term.clear()
	term.setCursorPos(1,1)
	term.setBackgroundColor(colors.white)
	term.setTextColor(colors.black)
	 if fs.isDir("defcon5") then
	 s=5
	 elseif fs.isDir("defcon4") then
	 s=4
	 elseif fs.isDir("defcon3") then
	 s=3
	 elseif fs.isDir("defcon2") then
	 s=2
	 elseif fs.isDir("defcon1") then
	 s=1
	 else fs.makeDir("defcon5")
	 r()
	 end
	term.clear()
	term.setTextColor(colors.black)
	print("You are at Defcon  ")
	term.setCursorPos(19,1)
	print(s)
	end
	function apiText()
	term.clear()
	term.setBackgroundColor(colors.white)
	term.setTextColor(colors.black)
	term.clear()
	r()
	term.setCursorPos(1,2)
	print("Enter a command to be executed")
	print("Enter exit() to exit()")
	end
  
	function apiRead()
	apiText()
	input=read()
	 if input==("show defcon level") then
	 r()
	  elseif input==("raise defcon level") then
	  defconDetermine()
	  raiseDefconLevel()
	   elseif input==("lower defcon level") then
	   defconDetermine()
	   lowerDefconLevel()
	   elseif input==("rednet") then
	   rednetSide()
	
	   elseif input==("exit()") then
	   os.reboot()
	   else print("Command does not exist!")
		apiRead()
		  end
	  end
	--rednet api
	function rednetApiText()
	shell.run("clear")
	term.setCursorPos(1,2)
	term.setTextColor(colors.red)
	print("Welcome to the Rednet API! Here you can send")
	print("infomation wirelessly to computers.")
	print("Enter a rednet code or enter exit() to")
	print("return to main menu.")
	end
  
	function rednetApi()
	rednetApiText()
	r()
	input=read()
	 if input==send then
	 rednetSide()
	 rednetSend()
	elseif input==("exit") then
	apiRead()
	 end
	end
  
	function rednetSend()
	input=read()
	id=input
	input=read()
	message=input
	rednet.send(id,message)
	end
  
  
  
  
  
	function rednetSide()
	term.clear()
	term.setCursorPos(1,1)
	 if fs.isDir("top") then
	 r="top"
	 rednet.close(r)
	 rednet.open(r)
	 rednetApi()
	 elseif fs.isDir("bottom") then
	 r="bottom"
	 rednet.close(r)
	 rednet.open(r)
	 rednetApi()
	 elseif fs.isDir("left") then
	 r="left"
	 rednet.close(r)
	 rednet.open(r)
	 rednetApi()
	 elseif fs.isDir("right") then
	 r="right"
	 rednet.close(r)
	 rednet.open(r)
	 rednetApi()
	 elseif fs.isDir("front") then
	 r="front"
	 rednet.close(r)
	 rednet.open(r)
	 rednetApi()
	 elseif fs.isDir("back") then
	 r="back"
	 rednet.close(r)
	 rednet.open(r)
	 rednetApi()
	end
	end
  
	--rednet api end
  
  
  
  
  
  
	function raiseDefconLevel()
	 if fs.isDir("defcon5") then
	 fs.delete("defcon5/")
	 fs.makeDir("defcon4")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon4") then
	 fs.delete("defcon4/")
	 fs.makeDir("defcon3")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon3") then
	 fs.delete("defcon3/")
	 fs.makeDir("defcon2")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon2") then
	 fs.delete("defcon2/")
	 fs.makeDir("defcon1")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon1") then
	 term.setTextColor(colors.red)
	 print("Error: Is at Defcon 1")
	 r()
	 apiText()
	 apiRead()
	 else
	 print("Error: Defcon has no current value")
	 r()
	 apiText()
	 apiRead()
	 end
	end
  
	function lowerDefconLevel()
	 if fs.isDir("defcon1") then
	 fs.delete("defcon1/")
	 fs.makeDir("defcon2")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon2") then
	 fs.delete("defcon2/")
	 fs.makeDir("defcon3")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon3") then
	 fs.delete("defcon3/")
	 fs.makeDir("defcon4")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon4") then
	 fs.delete("defcon4/")
	 fs.makeDir("defcon5")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon5") then
	 print("Error : Is at defcon 5")
	 sleep(0.75)
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 else print("Error : Defcon had no value")
	 sleep(0.75)
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 end
	end
	--Running code
	function defcon()
	drawScreen()
	drawLoginBox()
	drawLoginText()
	usernameInput()
	warning()
	end
  
	function defcon2()
  
	defconDetermine()
	r()
	apiRead()
	apiText()
	end
	defcon()
	x=5
	--Inital Screen
	function drawScreen()
	shell.run("draw")
	sleep(0.75)
	term.clear()
	term.setBackgroundColor(colors.white)
	term.setTextColor(colors.red)
	end
  
	function drawLoginBox()
	term.setTextColor(colors.black)
	term.setCursorPos(9,2)
	print("  ----------------------------------  ")
	term.setCursorPos(9,3)
	print(" |								  | ")
	term.setCursorPos(9,4)
	print(" |								  | ")
	term.setCursorPos(9,5)
	print(" |								  | ")
	term.setCursorPos(9,6)
	print(" |								  | ")
	term.setCursorPos(9,7)
	print("  ----------------------------------  ")
	end
  
	function drawLoginText()
	term.setCursorPos(12,4)
	print("Username:")
	term.setCursorPos(12,6)
	print("Password:")
	end
  
	function usernameInput()
	term.setCursorPos(22,4)
	input=read()
	 if input == ("kai") then
	 passwordInput()
	  elseif input == ("kaioo") then
	  passwordInput()
	  elseif input == ("kaioo132") then
	  passwordInput()
	  else
	  term.clear()
	  term.setCursorPos(1,1)
	  print("Username Incorrect")
	  sleep(0.75)
	  term.clear()
	  drawLoginBox()
	  drawLoginText()
	  usernameInput()
	  end
	 end
  
	function passwordInput()
	term.setCursorPos(22,6)
	input=read("*")
	 if input == ("nuke") then
	 term.clear()
	  else
	  term.clear()
	  term.setCursorPos(1,1)
	  print("Password Incorrect")
	  sleep(0.75)
	  term.clear()
	  term.setCursorPos(21,4)
	  term.setTextColor(colors.black)
	  print("kai")
	  drawLoginBox()
	  drawLoginText()
	  term.setCursorPos(21,4)
	  print("kai")
	  passwordInput()
	  end
	 end
  
	function warning()
	shell.run("clear")
	print("Warning! This program is illegal to run")
	print("on unautharized pc's. This is a system")
	print("designed for Blue Task (R). Press the")
	print("F1 key to continue.")
	 while true do
	 event,p1 = os.pullEvent()
	  if (event=="key") and (p1==59) then
	  defcon2()
	   end
	 end
	end
	--Inital Screen End
	--Defcon Determine
  
	function defconDetermine()
	term.setBackgroundColor(colors.white)
	term.clear()
	term.setBackgroundColor(colors.white)
	term.setTextColor(7)
	 if fs.exists("defcon5") then
	 print("You are at Defcon 5")
	 elseif fs.isDir("defcon4") then
	 print("You are at Defcon 4")
	 x=x-1
	 elseif fs.isDir("defcon3") then
	 print("You are at Defcon 3")
	 x=x-2
	 elseif fs.isDir("defcon2") then
	 print("You are at Defcon 2")
	 x=x-3
	 elseif fs.isDir("defcon1") then
	 print("You are at Defcon 1")
	 x=x-4
	 else
	 print("You are at Defcon 5")
	 fs.makeDir("defcon5")
	  end
	end
	--Defcon Determine End--
	--API--
	function r()
	term.setBackgroundColor(colors.white)
	term.clear()
	term.setCursorPos(1,1)
	term.setBackgroundColor(colors.white)
	term.setTextColor(colors.black)
	 if fs.isDir("defcon5") then
	 s=5
	 elseif fs.isDir("defcon4") then
	 s=4
	 elseif fs.isDir("defcon3") then
	 s=3
	 elseif fs.isDir("defcon2") then
	 s=2
	 elseif fs.isDir("defcon1") then
	 s=1
	 else fs.makeDir("defcon5")
	 r()
	 end
	term.clear()
	term.setTextColor(colors.black)
	print("You are at Defcon  ")
	term.setCursorPos(19,1)
	print(s)
	end
	function apiText()
	term.clear()
	term.setBackgroundColor(colors.white)
	term.setTextColor(colors.black)
	term.clear()
	r()
	term.setCursorPos(1,2)
	print("Enter a command to be executed")
	print("Enter exit() to exit()")
	end
  
	function apiRead()
	apiText()
	input=read()
	 if input==("show defcon level") then
	 r()
	  elseif input==("raise defcon level") then
	  defconDetermine()
	  raiseDefconLevel()
	   elseif input==("lower defcon level") then
	   defconDetermine()
	   lowerDefconLevel()
	   elseif input==("rednet") then
	   rednetSide()
	
	   elseif input==("exit()") then
	   os.reboot()
	   else print("Command does not exist!")
		apiRead()
		  end
	  end
	--rednet api
	function rednetApiText()
	shell.run("clear")
	term.setCursorPos(1,2)
	term.setTextColor(colors.red)
	print("Welcome to the Rednet API! Here you can send")
	print("infomation wirelessly to computers.")
	print("Enter a rednet code or enter exit() to")
	print("return to main menu.")
	end
  
	function rednetApi()
	rednetApiText()
	r()
	input=read()
	 if input==send then
	 rednetSide()
	 rednetSend()
	elseif input==("exit") then
	apiRead()
	 end
	end
  
	function rednetSend()
	input=read()
	id=input
	input=read()
	message=input
	rednet.send(id,message)
	end
  
  
  
  
  
	function rednetSide()
	term.clear()
	term.setCursorPos(1,1)
	 if fs.isDir("top") then
	 r="top"
	 rednet.close(r)
	 rednet.open(r)
	 rednetApi()
	 elseif fs.isDir("bottom") then
	 r="bottom"
	 rednet.close(r)
	 rednet.open(r)
	 rednetApi()
	 elseif fs.isDir("left") then
	 r="left"
	 rednet.close(r)
	 rednet.open(r)
	 rednetApi()
	 elseif fs.isDir("right") then
	 r="right"
	 rednet.close(r)
	 rednet.open(r)
	 rednetApi()
	 elseif fs.isDir("front") then
	 r="front"
	 rednet.close(r)
	 rednet.open(r)
	 rednetApi()
	 elseif fs.isDir("back") then
	 r="back"
	 rednet.close(r)
	 rednet.open(r)
	 rednetApi()
	end
	end
  
	--rednet api end
  
  
  
  
  
  
	function raiseDefconLevel()
	 if fs.isDir("defcon5") then
	 fs.delete("defcon5/")
	 fs.makeDir("defcon4")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon4") then
	 fs.delete("defcon4/")
	 fs.makeDir("defcon3")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon3") then
	 fs.delete("defcon3/")
	 fs.makeDir("defcon2")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon2") then
	 fs.delete("defcon2/")
	 fs.makeDir("defcon1")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon1") then
	 term.setTextColor(colors.red)
	 print("Error: Is at Defcon 1")
	 r()
	 apiText()
	 apiRead()
	 else
	 print("Error: Defcon has no current value")
	 r()
	 apiText()
	 apiRead()
	 end
	end
  
	function lowerDefconLevel()
	 if fs.isDir("defcon1") then
	 fs.delete("defcon1/")
	 fs.makeDir("defcon2")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon2") then
	 fs.delete("defcon2/")
	 fs.makeDir("defcon3")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon3") then
	 fs.delete("defcon3/")
	 fs.makeDir("defcon4")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon4") then
	 fs.delete("defcon4/")
	 fs.makeDir("defcon5")
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 elseif fs.isDir("defcon5") then
	 print("Error : Is at defcon 5")
	 sleep(0.75)
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 else print("Error : Defcon had no value")
	 sleep(0.75)
	 term.clear()
	 r()
	 apiText()
	 apiRead()
	 end
	end
	--Running code
	function defcon()
	drawScreen()
	drawLoginBox()
	drawLoginText()
	usernameInput()
	warning()
	end
  
	function defcon2()
  
	defconDetermine()
	r()
	apiRead()
	apiText()
	end
	defcon()

http://pastebin.com/ZjF6eYTL

pastebin get zjf6eytl defcon

Note: Sorry for long code.
This code is un-finished
Error is in rednetApi function where it says r()
Bomb Bloke #2
Posted 27 October 2013 - 06:12 PM
Although you define r as a function at line 119, as soon as you call rednetSide() it gets overwritten with a string.
kaioo1312 #3
Posted 28 October 2013 - 05:10 AM
Thanks, but how do i fix this?
theoriginalbit #4
Posted 28 October 2013 - 05:35 AM
what you should be doing is making sure to use local variables and better naming conventions.

Local variables

local foo = "bar" --# this variable is only accessible by this program and anything defined BELOW this declaration

local function hello() --# this function is only usable by the program and anything defined BELOW this declaration
  local world = "world!" --# this variable is ONLY accessible by THIS FUNCTION
  print(world)
end

Coding conventions
Variable overriding can be avoided by reducing naming collisions… Instead of naming a function `r` perhaps it could be name `run` or `runProgram` or `resetData` or something of the such. Variable names are commonly suggested to be descriptive of what they contain, function names are normally suggested to start with a verb and describe what they do in ~15 characters or less, with the exception being a function that returns a boolean variable where it is prefixed with `is` or `are`, `isAlive` or `arePointsColliding`. Another common technique to avoid naming collisions in Lua is to prefix the variable with the first letter of its type, for example a boolean would be `bAlive`, a string `sName`, etc.

The best solution for you would be to rename your variables and functions to something a little more descriptive to avoid problems.
kaioo1312 #5
Posted 28 October 2013 - 06:15 AM
Thanks I found it thanks to you to (eventualy) i realised my mistake. #suchANoob