Advertisement
Anaristos

Lua-based Consider Parser

Aug 2nd, 2012
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.40 KB | None | 0 0
  1. do
  2. --
  3. local lpeg = require("lpeg")
  4. local bit  = require("bit")
  5. --
  6. fold = function(flags, f)
  7. --
  8. local alist   = {
  9.                      Angry           = 128
  10.                     ,Diseased        =  64
  11.                     ,Invisible       =  32
  12.                     ,Hiding          =  16
  13.                     ,Translucent     =   8
  14.                     ,["Golden Aura"] =   4
  15.                     ,["Red Aura"]    =   2
  16.                     ,["White Aura"]  =   1
  17.                     ,D               =  64
  18.                     ,I               =  32
  19.                     ,H               =  16
  20.                     ,T               =   8
  21.                     ,G               =   4
  22.                     ,R               =   2
  23.                     ,W               =   1
  24.                   }
  25. --
  26. mask = alist[f] or 0
  27. --
  28. return bit.bor(flags,mask)
  29. --
  30. end
  31. --
  32. local text = zs.param( 1) or ""
  33. --
  34. local C, Cc, Cf, Cg, Ct, P = lpeg.C, lpeg.Cc, lpeg.Cf, lpeg.Cg, lpeg.Ct, lpeg.P
  35. --
  36. lpeg.locale(lpeg)
  37. --
  38. local g = Cc(0) * P('(' * C((1 - P(')'))^1) * ')' * lpeg.space^0)^0
  39. --
  40. local db = lpeg.match(Ct(Cg(Cf(g, fold), "flags")), text)
  41. --
  42. local mode = zs.func.roommode()
  43. --
  44. db.name  = zs.param( 2)
  45. --
  46. zs.func.roommode( 1)
  47. --
  48. db.room = zs.func.roomvnum()
  49. --
  50. zs.func.roommode( 0)
  51. --
  52. db.vnum = zs.func.roomvnum()
  53. --
  54. zs.func.roommode( mode)
  55. --
  56. db.zone = zs.func.roomzone()
  57. --
  58. return db
  59. --
  60. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement