Guest User

IdConv.lua

a guest
Sep 10th, 2013
396
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. ItemData = {}
  2. ItemData.mt = {}
  3. ItemData.mt.__tostring = function(data)
  4. return data.id .. ":" .. data.meta .. " => " .. data.name
  5. end
  6.  
  7. ItemData.create = function (arg)
  8. local itemdata = { name = arg.name,
  9. tooltip = arg.tooltip,
  10. id = arg.id,
  11. meta = arg.meta}
  12. setmetatable(itemdata,ItemData.mt)
  13. return itemdata
  14. end
  15.  
  16. ItemData.ErrorItemNotFound = function (id,meta)
  17. local err = "!!Data Not Found for " .. id .. ":" .. meta .. "!!"
  18. local itemdata = { name = err,
  19. tooltip = err,
  20. id = id,
  21. meta = meta}
  22. setmetatable(itemdata,ItemData.mt)
  23. return itemdata
  24. end
  25.  
  26.  
  27.  
  28.  
  29. IdConv = {}
  30. IdConv.__index = IdConv
  31.  
  32. function IdConv.create(filename)
  33. local conv = {} -- our new object
  34. setmetatable(conv,IdConv)
  35. conv.filename=filename
  36.  
  37. local loaddata = function (filename)
  38. -- Load the File
  39. local fh = fs.open(filename,"r")
  40. local datafor = {}
  41. for line in fh.readLine do
  42. for idstr, metastr, name, tooltip in string.gmatch(string.lower(line), "(%d-):(%d-) = (.+) = (.+)" ) do
  43. local id = tonumber(idstr)
  44. local meta = tonumber(metastr)
  45.  
  46. datafor[id] = datafor[id] or {} -- initalise it if it hasn't already been initalised
  47. datafor[id][meta] = ItemData.create{ id=id,
  48. meta = meta,
  49. name = name,
  50. tooltip = tooltip,
  51. }
  52. end
  53. end
  54. fh.close()
  55. return datafor
  56. end
  57.  
  58. conv.datafor = loaddata(filename)
  59.  
  60. return conv
  61. end
  62.  
  63.  
  64. function IdConv:getDataFor(id, meta)
  65. local idData = self.datafor[id]
  66. if (idData) then
  67.  
  68. --Got info about this item,
  69. local exactItemData = idData[meta]
  70. if exactItemData then
  71. return exactItemData
  72. else
  73. -- Exact meta not matched, pick first on record that has am id
  74. -- This is the case for a damaged sword etc
  75. local _, firstValue = next(idData)
  76. return firstValue
  77. end
  78. else
  79. return ItemData.ErrorItemNotFound(id,meta)
  80. end
  81. end
  82.  
  83. ------------- UUID related -----------------
  84.  
  85. function IdConv:getUuid(id,meta)
  86. return id + meta * 32768
  87. end
  88.  
  89. function IdConv:getFullID(uuid)
  90. local ret = {}
  91. if uuid > 32768 then
  92. ret.id = uuid%32768
  93. ret.meta = (uuid - ret.id)/32768
  94. else
  95. ret.id = uuid
  96. ret.meta = 0
  97. end
  98. return ret
  99. end
Advertisement
Add Comment
Please, Sign In to add comment