def_room.lua

changeset 0
cc66ad6b0d75
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/def_room.lua	Sat Mar 27 17:43:08 2010 +0000
@@ -0,0 +1,74 @@
+
+classes.obj_room =
+{
+	_properties = {};
+	_create = function (self, e)
+				self.people = {}; self._objects = createcontainertable(); self._properties.name = e.room; self._properties.server = e.server; self.jid = e.room.."@"..e.server;
+				if type(tpl_rooms[e.room]) == "table" then
+					for k, v in pairs(tpl_rooms[e.room]) do
+						self[k] = v;
+					end
+					return self._init and self._init(self, e);
+				end
+			end,
+	_addobject = 	function (self, e)
+					if e.class then self._objects:add(e.class:_create{room = self, name = e.name, ext = e }); end
+				end,
+	_addalias = 	function (self, e)
+					for k, v in ipairs(e) do
+						self._objects:addalias(e[1], v);
+					end
+				end,
+	_enter = 	function (self, e)
+				PSay(e.room, e.nick, " ", "You have entered "..(e.room._properties.longname or e.room._properties.name or "the room"));
+			end,
+	_findobject=function (self, tag)
+				if not tag then return nil; end
+				tag = tag:match("^the (.*)$") or tag;
+				return self._objects:findobject(tag);
+			end,
+	look =	function (self, e)
+				local contents = {};
+				local contents2 = {};
+				contents = self._objects:getallobjects();
+				for o, exists in pairs(contents) do
+					table.insert(contents2, o._properties.longname or o._properties.name or "Something");
+				end
+				
+				e.person:_tell("You see in this room: "..table.concat(contents2,", "));
+			end,
+	obj = function (self, e)
+				local contents = {};
+				local contents2 = {};
+				contents = self._objects:getallobjects();
+				for o, exists in pairs(contents) do
+					table.insert(contents2, (o._properties.longname or o._properties.name or "Something")..(" ("..o._properties.name or "No name")..")");
+				end
+				
+				e.person:_tell("You see in this room: \n"..table.concat(contents2,"\n"));
+			end,
+	teleport = function (self, e)
+				if not e.param or #(e.param) == 0 then PSay(e.room, e.nick, " ", "Teleport to where exactly?"); end
+				MoveToRoom(e.person, e.param);
+			end,
+	where =	function (self, e)
+				PSay(e.room, e.nick, " ", "You are in "..e.room._properties.name);
+			end
+}
+
+function classes.obj_room:_unlink(o)
+	if not self._objects then print("Attempt to _unlink from an empty room."); return nil; end
+	if type(o) == "string" then o = self._objects:findobject(o); end
+	if (not o) or (o._properties and o._properties.static == true) then return false; end
+	if self._objects:remove(o) then
+		return true;
+	end
+end
+
+function classes.obj_room:_get(i)
+	if not self._objects then self._objects = createcontainertable(); end
+	if not i.container:_unlink(i.object) then return false; end
+	print("room _get", self._properties.name or "o");
+	self._objects:add(i.object);
+	return true;
+end

mercurial