From b1c3386ca4032ac5925969d759ae2e5bc015d1f8 Mon Sep 17 00:00:00 2001 From: "U-DESKTOP-FOJ6TK1\\Alex" Date: Wed, 12 Feb 2025 17:25:25 -0600 Subject: Final commit --- client/data/house.lua | 255 ++++++++++++++++++++++++++------------------------ 1 file changed, 132 insertions(+), 123 deletions(-) (limited to 'client/data/house.lua') diff --git a/client/data/house.lua b/client/data/house.lua index 98d54ac..ee304d6 100644 --- a/client/data/house.lua +++ b/client/data/house.lua @@ -1,123 +1,132 @@ -local room = require("room") -local world = require("world") -local house = {} - -local direction_map = { - north = {0,1,0}, - south = {0,-1,0}, - east = {1,0,0}, - west = {-1,0,0}, - up = {0,0,1}, - down = {0,0,-1}, -} -local opposite = { - north = "south", - south = "north", - east = "west", - west = "east", - up = "down", - down = "up" -} -local house_base = { - create_room = function(self,room_from,direction,roomname) - print("create_room called with roomname",roomname) - local from_loc = room_from.location - local xs,ys,zs = string.match(from_loc,"(%d+)x(%d+)x(%d+)") - local x,y,z = tonumber(xs),tonumber(ys),tonumber(zs) - local vec = {x,y,z} - local sdir = string.lower(direction) - assertf(direction_map[sdir],"Could not find direction %s",sdir) - local to = direction_map[sdir] - for i = 1,3 do - vec[i] = vec[i] + to[i] - end - local newroom_loc = table.concat(vec,"x") - print("Creating a room with name", roomname) - local newroom = room.create_new(roomname,newroom_loc) - print("Settings new room's location to", newroom.location,"newroom is",newroom.name) - room_from.go[sdir] = newroom - newroom.go[opposite[sdir]] = room_from - self.rooms[newroom_loc] = newroom - print("After creating room, house's rooms are ") - for k,v in pairs(self.rooms) do - print(k,v.name) - print("can go") - for i,j in pairs(v.go) do - print("\t",i,j.name) - end - end - end, - destroy_room = function(self,room_from,direction) - local from_loc = room_from.location - local xs,ys,zs = string.match(from_loc,"(%d+)x(%d+)x(%d+)") - local x,y,z = tonumber(xs),tonumber(ys),tonumber(zs) - local vec = {x,y,z} - local sdir = string.lower(direction) - assertf(direction_map[sdir],"Could not find direction %s",sdir) - local to = direction_map[sdir] - for i = 1,3 do - vec[i] = vec[i] + to[i] - end - local roomloc = table.concat(vec,"x") - if roomloc == "1x1x1" then --Don't let them destory the origin room - fail_hint("You cannot destroy the origin room") - return - end - for dirname,dirvec in pairs(direction_map) do - local newvec = {vec[1],vec[2],vec[3]} - for i = 1,3 do - newvec[i] = newvec[i] + dirvec[i] - end - local dc_loc = table.concat(newvec,"x") - if self.rooms[dc_loc] and self.rooms[dc_loc].go[opposite[dirname]] then - self.rooms[dc_loc].go[opposite[dirname]] = nil - end - end - self.rooms[roomloc] = nil - end, - create_doorway = function(self,room_from, direction) - local from_loc = room_from.location - local xs,ys,zs = string.match(from_loc,"(%d+)x(%d+)x(%d+)") - local x,y,z = tonumber(xs),tonumber(ys),tonumber(zs) - local vec = {x,y,z} - local sdir = string.lower(direction) - for i = 1,3 do - vec[i] = vec[i] + direction_map[direction][i] - end - local otherroom = self.rooms[table.concat(vec,"x")] - room_from.go[direction] = otherroom - otherroom.go[opposite[direction]] = room_from - end, - has_room_in_direction = function(self,room_from,direction) - direction = string.lower(direction) - assertf(direction_map[direction],"Did not understand direction: %q",direction) - local from_loc = room_from.location - print("From location is:",from_loc) - local xs,ys,zs = string.match(from_loc,"(%d+)x(%d+)x(%d+)") - local x,y,z = tonumber(xs),tonumber(ys),tonumber(zs) - local vec = {x,y,z} - for i = 1,3 do - vec[i] = vec[i] + direction_map[direction][i] - end - local sdir = string.lower(direction) - return self.rooms[table.concat(vec,"x")] ~= nil - end, -} -local house_m = {__index=house_base} - -function house.create_new(housename,from) - local ret = {name = housename, rooms={}, ownerid = playerid, ["in"]=from} - ret.rooms["1x1x1"] = room.create_new("Front yard","1x1x1") - ret.rooms["1x1x1"].go["south"] = "exit" - setmetatable(house,house_m) - return ret -end -function house.create_from_data(data) - local ret = assert(loadstring(data,"loaded_house")) - setmetatable(ret,house_m) - return ret -end - -house.meta = house_m - -return house +local room = require("room") +local world = require("world") +local house = {} + +local direction_map = { + north = {0,1,0}, + south = {0,-1,0}, + east = {1,0,0}, + west = {-1,0,0}, + up = {0,0,1}, + down = {0,0,-1}, +} +local opposite = { + north = "south", + south = "north", + east = "west", + west = "east", + up = "down", + down = "up" +} +local house_base = { + create_room = function(self,room_from,direction,roomname) + print("create_room called with roomname",roomname) + local from_loc = room_from.location + local xs,ys,zs = string.match(from_loc,"(%d+)x(%d+)x(%d+)") + local x,y,z = tonumber(xs),tonumber(ys),tonumber(zs) + local vec = {x,y,z} + local sdir = string.lower(direction) + assertf(direction_map[sdir],"Could not find direction %s",sdir) + local to = direction_map[sdir] + for i = 1,3 do + vec[i] = vec[i] + to[i] + end + local newroom_loc = table.concat(vec,"x") + if newroom_loc == "1x1x1" then + fail_hint("You cannot overwrite the origin room") + return + end + print("Creating a room with name", roomname) + local newroom = room.create_new(roomname,newroom_loc) + print("Settings new room's location to", newroom.location,"newroom is",newroom.name) + room_from.go[sdir] = newroom + newroom.go[opposite[sdir]] = room_from + self.rooms[newroom_loc] = newroom + print("After creating room, house's rooms are ") + for k,v in pairs(self.rooms) do + if v ~= "exit" then + print(k,v.name) + print("can go") + for i,j in pairs(v.go) do + print("\t",i,j.name) + end + end + end + end, + destroy_room = function(self,room_from,direction) + local from_loc = room_from.location + local xs,ys,zs = string.match(from_loc,"(%d+)x(%d+)x(%d+)") + local x,y,z = tonumber(xs),tonumber(ys),tonumber(zs) + local vec = {x,y,z} + local sdir = string.lower(direction) + assertf(direction_map[sdir],"Could not find direction %s",sdir) + local to = direction_map[sdir] + for i = 1,3 do + vec[i] = vec[i] + to[i] + end + local roomloc = table.concat(vec,"x") + if roomloc == "1x1x1" or roomloc == "1x0x1" then --Don't let them destory the origin room + fail_hint("You cannot destroy the origin or exit rooms") + return + end + for dirname,dirvec in pairs(direction_map) do + local newvec = {vec[1],vec[2],vec[3]} + for i = 1,3 do + newvec[i] = newvec[i] + dirvec[i] + end + local dc_loc = table.concat(newvec,"x") + if self.rooms[dc_loc] and self.rooms[dc_loc].go[opposite[dirname]] then + self.rooms[dc_loc].go[opposite[dirname]] = nil + end + end + self.rooms[roomloc] = nil + end, + create_doorway = function(self,room_from, direction) + local from_loc = room_from.location + local xs,ys,zs = string.match(from_loc,"(%d+)x(%d+)x(%d+)") + local x,y,z = tonumber(xs),tonumber(ys),tonumber(zs) + local vec = {x,y,z} + local sdir = string.lower(direction) + for i = 1,3 do + vec[i] = vec[i] + direction_map[direction][i] + end + local otherroom = self.rooms[table.concat(vec,"x")] + room_from.go[direction] = otherroom + otherroom.go[opposite[direction]] = room_from + end, + has_room_in_direction = function(self,room_from,direction) + direction = string.lower(direction) + assertf(direction_map[direction],"Did not understand direction: %q",direction) + local from_loc = room_from.location + print("From location is:",from_loc) + local xs,ys,zs = string.match(from_loc,"(%d+)x(%d+)x(%d+)") + local x,y,z = tonumber(xs),tonumber(ys),tonumber(zs) + local vec = {x,y,z} + for i = 1,3 do + vec[i] = vec[i] + direction_map[direction][i] + end + local sdir = string.lower(direction) + local other_loc = table.concat(vec,"x") + print("Other loc:",other_loc) + return self.rooms[outher_loc] ~= nil + end, +} +local house_m = {__index=house_base} + +function house.create_new(housename,from) + local ret = {name = housename, rooms={}, ownerid = playerid, ["in"]=from} + ret.rooms["1x1x1"] = room.create_new("Front yard","1x1x1") + ret.rooms["1x1x1"].go["south"] = "exit" + ret.rooms["1x0x1"] = "exit" + setmetatable(house,house_m) + return ret +end +function house.create_from_data(data) + local ret = assert(loadstring(data,"loaded_house")) + setmetatable(ret,house_m) + return ret +end + +house.meta = house_m + +return house -- cgit v1.2.3-70-g09d2