Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require("CLRPackage")
- --
- import "System.Text.RegularExpressions"
- --
- require("re")
- --
- Area = class()
- --
- Areas = LinqArray()
- --
- function Area:init(flevel, tlevel, llock, name, eploc, sid, zid)
- --
- self.FromLevel = flevel or 0
- self.Tolevel = tlevel or 0
- self.LevelLock = llevel or 0
- self.Name = name or ""
- self.EntryPoint = eploc or ""
- self.ShortID = sid or ""
- self.ZoneID = zid or -1
- --
- end
- --
- function Area:load()
- --
- local ssa = sqlServer.ctor("MOBILEOFFICE\\SQLSERVEREXPRESS","Aardwolf")
- ssa.Open()
- local result = ssa.execProc("cd_get_area_new_tbl")
- for i = 0, #result
- do
- Areas:add(
- Area(
- result[i].Fromlevel
- ,result[i].ToLevel
- ,result[i].LevelLock
- ,result[i].Area
- ,result[i].EntryPoint
- ,result[i].ShortID
- ,result[i].ZoneID
- )
- )
- end
- ssa.Close()
- --
- end
- --
- Room = class()
- --
- Rooms = LinqArray()
- --
- function Room:init(objid, name, idname, refnum, userstr, userint, zid)
- --
- self.ObjId = objid or 0
- self.Name = name or ""
- self.IDName = idname or ""
- self.RefNum = refnum or -1
- self.UserStr = userstr or ""
- self.UserInt = userint or 0
- self.ZoneID = zid or -1
- --
- end
- --
- function Room:load()
- local ssa = sqlManager.ctor("C:\\Tony Gomez\\SQLite3\\Databases\\AardwolfV3.dbm")
- ssa.Open()
- local sql = "SELECT [ObjId], [Name], [IDName], [RefNum], [UserStr], [UserInt], [ZoneID] "
- sql = sql.."FROM [ObjectTbl] WHERE [Name] != '' AND [UserInt] & 128 = 0 ORDER BY [ObjId]"
- local result = ssa.execSelect(sql)
- for i = 0, #result
- do
- Rooms:add(
- Room(
- result[i].ObjId
- ,result[i].Name
- ,result[i].IDName
- ,result[i].RefNum
- ,result[i].UserStr
- ,result[i].UserInt
- ,result[i].ZoneID
- )
- )
- end
- ssa.Close()
- --
- end
- --
- Zone = class()
- --
- Zones = LinqArray()
- --
- function Zone:init(zid, name, parent)
- --
- self.ZoneId = zid or -1
- self.Name = name or ""
- self.Parent = parent or -1
- --
- end
- --
- function Zone:load()
- local ssa = sqlManager.ctor("C:\\Tony Gomez\\SQLite3\\Databases\\AardwolfV3.dbm")
- ssa.Open()
- local sql = "SELECT [ZoneId], [Name], [Parent] FROM [ZoneTbl] ORDER BY [ZoneId]"
- local result = ssa.execSelect(sql)
- for i = 0, #result
- do
- Zones:add(
- Zone(
- result[i].ZoneId
- ,result[i].Name
- ,result[i].Parent
- )
- )
- end
- ssa.Close()
- --
- end
- --
- Area:load()
- --
- Room:load()
- --
- Zone:load()
- --
- function querydbm(req, room, zone)
- --
- dbm_grl = function(room)
- local w = function(w) return w.Name:lower():find(room:lower()) end
- local s = function(s) return { ri = s.ObjId, rv = s.RefNum, rn = s.Name, rz = s.ZoneID } end
- local c = function(r, z) return r.rz == z.ZoneId end
- local r = function(r, z) return { ri = r.ri, rv = r.rv, rn = r.rn, zn = z.Name } end
- local rooms = Rooms:where(w):select(s):join(Zones,c,r)
- return rooms, rooms:count(), rooms:max(function(m) return m.rn:len() end)
- end
- dbm_srl = function(room, zname)
- local w1 = function(w) return w.Name:lower():find(room:lower()) end
- local w2 = function(w) return w.Name:lower():find(zone) end
- local s1 = function(s) return { ri = s.ObjId, rv = s.RefNum, rn = s.Name, rz = s.ZoneID } end
- local s2 = function(s) return { zn = s.Name, zz = s.ZoneId } end
- local c = function(r, z) return r.rz == z.zz end
- local r = function(r, z) return { ri = r.ri, rv = r.rv, rn = r.rn, zn = z.zn } end
- local zone = re.match((zname:lower()):gsub("'","''"),"'the '? {.*}")
- local rooms = Rooms:where(w1):select(s1):join(Zones:where(w2):select(s2),c,r)
- return rooms, rooms:count(), rooms:max(function(m) return m.rn:len() end)
- end
- dbm_mrl = function(room)
- local regex = Regex("(?i)^"..room.."(?:$| \\(g\\)| \\([^\\)]+\\)| \\[\\*\\*\\> pk \\<\\*\\*\\]| \\[\\*\\*\\> cmaze \\<\\*\\*\\])")
- local w = function(w) return regex:Match(w.Name).Success end
- local s = function(s) return { ri = s.ObjId, rv = s.RefNum, rn = s.Name, rz = s.ZoneID } end
- local c = function(r, z) return r.rz == z.zz end
- local r = function(r, z) return { ri = r.ri, rv = r.rv, rn = r.rn, zn = z.Name } end
- local rooms = Rooms:where(w):select(s):join(Zones,c,r)
- return rooms, rooms:count(), rooms:max(function(m) return m.rn:len() end)
- end
- dbm_zrl = function(room,zname)
- local regex = Regex("(?i)^"..room.."(?:$| \\(g\\)| \\([^\\)]+\\)| \\[\\*\\*\\> pk \\<\\*\\*\\]| \\[\\*\\*\\> cmaze \\<\\*\\*\\])")
- local w1 = function(w) return regex:Match(w.Name).Success end
- local w2 = function(w) return w.Name:lower():find(zone) end
- local s1 = function(s) return { ri = s.ObjId, rv = s.RefNum, rn = s.Name, rz = s.ZoneID } end
- local s2 = function(s) return { zn = s.Name, zz = s.ZoneId } end
- local r = function(r) return r.rz end
- local z = function(z) return z.zz end
- local rz = function(r, z) return { ri = r.ri, rv = r.rv, rn = r.rn, zn = z.zn } end
- local zone = re.match((zname:lower()):gsub("'","''"),"'the '? {.*}")
- local rooms = Rooms:where(w1):select(s1):join(Zones:where(w2):select(s2),r,z,rz)
- return rooms, rooms:count(), rooms:max(function(m) return m.rn:len() end)
- end
- --
- local reqtab = {dbm_grl, dbm_srl, dbm_mrl, dbm_zrl }
- if type(req) == "number" and req >= 0 and req <= 3 then
- return reqtab[req + 1](room, zone)
- else return ""
- end
- --
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement