common.lua

1
-- New version, using 100% inheritance through metatables
2
function CreateObject(base, name)
3
	local b = {};
4
	for k, v in pairs(base) do
5
		if type(v) == "table" then
6
			b[k] = CreateObject(v, false);
7
		end
8
	end
9
	if name ~= false then
10
		b._parent = base; setmetatable(b, { __index = _inheritproc });
11
		b._properties = b._properties or {};
12
		b._properties.name = name or (base._properties and base._properties.name) or "";
13
	else
14
		setmetatable(b, getmetatable(base) or { __index = base });
15
	end
16
	return b;
17
end
18
 
19
function GetJIDParts(jid)
20
	local j1node, j1server, j1res = jid:match("^(.+)@([%a%.]+)/?(.*)$");
21
	return { node = j1node, server = j1server, resource = j1res, jid = jid }
22
end
23
 
24
function basicSerialize (o)
25
  if type(o) == "number" or type(o) == "boolean" then
26
    return tostring(o)
27
  else -- assume it is a string
28
    return string.format("%q", tostring(o))
29
  end
30
end
31
 
32
function table.print (name, value, saved)
33
  saved = saved or {}       -- initial value
34
  io.write(name, " = ")
35
  if type(value) == "number" or type(value) == "string" or type(value) == "boolean" or type(value)=="function" then
36
    io.write(basicSerialize(value), "\n")
37
  elseif type(value) == "table" then
38
    if saved[value] then    -- value already saved?
39
      io.write(saved[value], "\n")  -- use its previous name
40
    else
41
      saved[value] = name   -- save name for next time
42
      io.write("{}\n")     -- create a new table
43
      for k,v in pairs(value) do      -- save its fields
44
        local fieldname = string.format("%s[%s]", name,
45
                                        basicSerialize(k))
46
        table.print(fieldname, v, saved)
47
      end
48
    end
49
  else
50
    error("cannot save a " .. type(value))
51
  end
52
end
53
 
54
 
55
function _inheritproc(t, k)
56
	local parent = rawget(t, "_parent");
57
	if type(parent) == "table" then
58
		return (rawget(parent, k) or _inheritproc(parent, k));
59
	else
60
		return parent and (rawget(classes[parent], k) or _inheritproc(classes[parent], k));
61
	end
62
end
63
 
64
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;
65
tpl_rooms = {}
66
 
67
dofile("containertables.inc.lua");
68
dofile("commands.lua");
69
dofile("def_object.lua");
70
dofile("def_occupant.lua");
71
dofile("def_room.lua");
72
 
73
dofile("rooms.lua");
74
dofile("classes.lua");
75
dofile("editing.lua");