Sat, 27 Mar 2010 17:43:08 +0000
Initial commit (importing from old SVN repo which got lost)
-- 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");