Difference between revisions of "Entity Tutorial 3: Random Script"

From SkyCorp Global
(new lua steps)
 
(One intermediate revision by the same user not shown)
Line 6: Line 6:
 
The code is extended as follows -- take a read through the comments.
 
The code is extended as follows -- take a read through the comments.
  
CODE
+
<syntaxhighlight lang="lua">
 +
function description()
 +
 
 +
  -- Create a blank string to store the color in
 +
  local colorString = "";
 +
 
 +
  -- Get a random integer in the range of 1-3
 +
  local randomNumber = math.random(1,3);
 +
 
 +
  -- Set color string to a different color based on the random number
 +
  if randomNumber == 1 then
 +
      colorString = "red"
 +
  elseif randomNumber == 2 then
 +
      colorString = "green"
 +
  elseif randomNumber == 3 then
 +
      colorString = "blue"
 +
  else
 +
      colorString = "unknown" -- As the number should be 1, 2, or 3, should not reach here
 +
  end
 +
 
 +
  -- Return a string with (possibly) a different color each time
 +
  return "The gem shines brightly, reflecting " .. colorString .. " into your eyes.";
 +
 
 +
end
 +
</syntaxhighlight>
 +
 
 +
Try running it through command line lua to check for syntax & logic errors.
 +
 
 +
After escaping the program, you'll have some lua code to paste into the new json definition.
  
 
== JSON Definition ==
 
== JSON Definition ==
After luac'ing and base64'ing the program, we get some base64 luac code which the JSON can be updated with:
+
The new lua code can be inserted:
  
JSON
+
<syntaxhighlight lang="json">
 +
{
 +
"type": "ENTITY",
 +
"name":
 +
{
 +
"literalString" : "Shiniest Gem"
 +
},
 +
"description":
 +
{
 +
"programString": true
 +
},
 +
"lua": "function description()\r\n\r\n  -- Create a blank string to store the color in\r\n  local colorString = \"\";\r\n\r\n  -- Get a random integer in the range of 1-3\r\n  local randomNumber = math.random(1,3);\r\n\r\n  -- Set color string to a different color based on the random number\r\n  if randomNumber == 1 then\r\n      colorString = \"red\"\r\n  elseif randomNumber == 2 then\r\n      colorString = \"green\"\r\n  elseif randomNumber == 3 then\r\n      colorString = \"blue\"\r\n  else\r\n      colorString = \"unknown\" -- As the number should be 1, 2, or 3, should not reach here\r\n  end\r\n\r\n  -- Return a string with (possibly) a different color each time\r\n  return \"The gem shines brightly, reflecting \" .. colorString .. \" into your eyes.\";\r\n\r\nend\r\n\r\n-- The below lines are commented out.  Uncommenting them can be helpful for\r\n-- testing the program in lua command line.  Comment or delete them before\r\n-- compiling the program for in-game usage, though!\r\n\r\n--for i=1,10 do\r\n-- io.write(description() .. \"\\n\");\r\n--end"
 +
}
 +
</syntaxhighlight>
  
 
== Running ==
 
== Running ==
 
Now each time the gem is looked at, a different color is returned (well, up to three colors anyway).
 
Now each time the gem is looked at, a different color is returned (well, up to three colors anyway).

Latest revision as of 02:01, 14 July 2023

Previously we created a gem that would display a description using LUA. Since we're using LUA to power the description, this allows us to do more than just return the same thing every time.

In this tutorial, we'll extend our test gem to reflect a different color of light each time the user looks at it.

LUA Code

The code is extended as follows -- take a read through the comments.

function description()

   -- Create a blank string to store the color in
   local colorString = "";

   -- Get a random integer in the range of 1-3
   local randomNumber = math.random(1,3);

   -- Set color string to a different color based on the random number
   if randomNumber == 1 then
      colorString = "red"
   elseif randomNumber == 2 then
      colorString = "green"
   elseif randomNumber == 3 then
      colorString = "blue"
   else
      colorString = "unknown" -- As the number should be 1, 2, or 3, should not reach here
   end

   -- Return a string with (possibly) a different color each time
   return "The gem shines brightly, reflecting " .. colorString .. " into your eyes.";

end

Try running it through command line lua to check for syntax & logic errors.

After escaping the program, you'll have some lua code to paste into the new json definition.

JSON Definition

The new lua code can be inserted:

{
	"type": "ENTITY",
	"name":
	{
		"literalString" : "Shiniest Gem"
	},
	"description":
	{
		"programString": true
	},
	"lua": "function description()\r\n\r\n   -- Create a blank string to store the color in\r\n   local colorString = \"\";\r\n\r\n   -- Get a random integer in the range of 1-3\r\n   local randomNumber = math.random(1,3);\r\n\r\n   -- Set color string to a different color based on the random number\r\n   if randomNumber == 1 then\r\n      colorString = \"red\"\r\n   elseif randomNumber == 2 then\r\n      colorString = \"green\"\r\n   elseif randomNumber == 3 then\r\n      colorString = \"blue\"\r\n   else\r\n      colorString = \"unknown\" -- As the number should be 1, 2, or 3, should not reach here\r\n   end\r\n\r\n   -- Return a string with (possibly) a different color each time\r\n   return \"The gem shines brightly, reflecting \" .. colorString .. \" into your eyes.\";\r\n\r\nend\r\n\r\n-- The below lines are commented out.  Uncommenting them can be helpful for\r\n-- testing the program in lua command line.  Comment or delete them before\r\n-- compiling the program for in-game usage, though!\r\n\r\n--for i=1,10 do\r\n-- io.write(description() .. \"\\n\");\r\n--end"
}

Running

Now each time the gem is looked at, a different color is returned (well, up to three colors anyway).