-- New version, using 100% inheritance through metatables
function CreateObject(base, name)
local b = {};
for k, v in pairs(base) do
if type(v) == "table" then
b[k] = CreateObject(v, false);
end
end
if name ~= false then
b._parent = base; setmetatable(b, { __index = _inheritproc });
b._properties = b._properties or {};
b._properties.name = name or (base._properties and base._properties.name) or "";
else
setmetatable(b, getmetatable(base) or { __index = base });
end
return b;
end
function GetJIDParts(jid)
local j1node, j1server, j1res = jid:match("^(.+)@([%a%.]+)/?(.*)$");
return { node = j1node, server = j1server, resource = j1res, jid = jid }
end
function basicSerialize (o)
if type(o) == "number" or type(o) == "boolean" then
return tostring(o)
else -- assume it is a string
return string.format("%q", tostring(o))
end
end
function table.print (name, value, saved)
saved = saved or {} -- initial value
io.write(name, " = ")
if type(value) == "number" or type(value) == "string" or type(value) == "boolean" or type(value)=="function" then
io.write(basicSerialize(value), "\n")
elseif type(value) == "table" then
if saved[value] then -- value already saved?
io.write(saved[value], "\n") -- use its previous name
else
saved[value] = name -- save name for next time
io.write("{}\n") -- create a new table
for k,v in pairs(value) do -- save its fields
local fieldname = string.format("%s[%s]", name,
basicSerialize(k))
table.print(fieldname, v, saved)
end
end
else
error("cannot save a " .. type(value))
end
end
function _inheritproc(t, k)
local parent = rawget(t, "_parent");
if type(parent) == "table" then
return (rawget(parent, k) or _inheritproc(parent, k));
else
return parent and (rawget(classes[parent], k) or _inheritproc(classes[parent], k));
end
end
classes = classes or setmetatable({ default = {} }, { __newindex = function (t, k, v) if not rawget(v, "_parent") then rawset(v, "_parent", rawget(t, "default")); end return rawset(t, k, setmetatable(v, { __index = _inheritproc })); end, __index = function (t, k) dofile(string.format("objects/%s.lua", k)); return rawget(t, k); end }); -- This is our inheritance code;
tpl_rooms = {}
dofile("containertables.inc.lua");
dofile("commands.lua");
dofile("def_object.lua");
dofile("def_occupant.lua");
dofile("def_room.lua");
dofile("rooms.lua");
dofile("classes.lua");
dofile("editing.lua");