-function basic_dump2(o)
- if type(o) == "number" then
- return tostring(o)
- elseif type(o) == "string" then
- return string.format("%q", o)
- elseif type(o) == "boolean" then
- return tostring(o)
- elseif type(o) == "function" then
- return "<function>"
- elseif type(o) == "userdata" then
- return "<userdata>"
- elseif type(o) == "nil" then
- return "nil"
- else
- error("cannot dump a " .. type(o))
- return nil
- end
-end
-
-function dump2(o, name, dumped)
- name = name or "_"
- dumped = dumped or {}
- io.write(name, " = ")
- if type(o) == "number" or type(o) == "string" or type(o) == "boolean"
- or type(o) == "function" or type(o) == "nil"
- or type(o) == "userdata" then
- io.write(basic_dump2(o), "\n")
- elseif type(o) == "table" then
- if dumped[o] then
- io.write(dumped[o], "\n")
- else
- dumped[o] = name
- io.write("{}\n") -- new table
- for k,v in pairs(o) do
- local fieldname = string.format("%s[%s]", name, basic_dump2(k))
- dump2(v, fieldname, dumped)
- end
- end
- else
- error("cannot dump a " .. type(o))
- return nil
- end
-end
-
-function dump(o, dumped)
- dumped = dumped or {}
- if type(o) == "number" then
- return tostring(o)
- elseif type(o) == "string" then
- return string.format("%q", o)
- elseif type(o) == "table" then
- if dumped[o] then
- return "<circular reference>"
- end
- dumped[o] = true
- local t = {}
- for k,v in pairs(o) do
- t[#t+1] = "" .. k .. " = " .. dump(v, dumped)
- end
- return "{" .. table.concat(t, ", ") .. "}"
- elseif type(o) == "boolean" then
- return tostring(o)
- elseif type(o) == "function" then
- return "<function>"
- elseif type(o) == "userdata" then
- return "<userdata>"
- elseif type(o) == "nil" then
- return "nil"
- else
- error("cannot dump a " .. type(o))
- return nil
- end
-end
-
+-- Helper functions defined by builtin.lua:
+-- dump2(obj, name="_", dumped={})
+-- dump(obj, dumped={})
+--
-- Textures:
-- Mods should prefix their textures with modname_, eg. given the mod
-- name "foomod", a texture could be called "foomod_superfurnace.png"
// Initialize default node definitions
content_mapnode_init(m_nodedef);
+ // Path to builtin.lua
+ std::string builtinpath = porting::path_data + DIR_DELIM + "builtin.lua";
// Add default global mod path
m_modspaths.push_back(porting::path_data + DIR_DELIM + "mods");
assert(m_lua);
// Export API
scriptapi_export(m_lua, this);
- // Load and run scripts
+ // Load and run builtin.lua
+ infostream<<"Server: Loading builtin Lua stuff from \""<<builtinpath
+ <<"\""<<std::endl;
+ bool success = script_load(m_lua, builtinpath.c_str());
+ if(!success){
+ errorstream<<"Server: Failed to load and run "
+ <<builtinpath<<std::endl;
+ assert(0);
+ }
+ // Load and run "mod" scripts
core::list<ModSpec> mods = getMods(m_modspaths);
for(core::list<ModSpec>::Iterator i = mods.begin();
i != mods.end(); i++){