diff -r 000000000000 -r cc66ad6b0d75 common.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common.lua Sat Mar 27 17:43:08 2010 +0000 @@ -0,0 +1,75 @@ +-- 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"); \ No newline at end of file