Advertisement
fishermedders

Shop

Jan 30th, 2018
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.35 KB | None | 0 0
  1. oPim = peripheral.wrap( "back" )
  2. oGlasses = peripheral.wrap( "openperipheral_glassesbridge_5" )
  3. oMonitor = peripheral.wrap( "monitor_215" )
  4. sGOptions = " | $$clear -> Clear Screen"
  5. oMonitor.setTextScale( 0.5 )
  6.  
  7. function drawBar( nY )
  8. local tSize = { term.getSize() }
  9. term.setCursorPos( 1, nY )
  10. for i = 1, tSize[1] do
  11. term.write( " " )
  12. end
  13. end
  14.  
  15. function cPrint( sText, nY )
  16. local tSize = { term.getSize() }
  17. term.setCursorPos( ( ( tSize[1]/2 )-( #sText/2 ) )+1, nY )
  18. term.write( sText )
  19. end
  20.  
  21. --NonEssential Functions
  22.  
  23. function checkGlasses( sPlayer )
  24. tUsers = oGlasses.getUsers()
  25. for i = 1,#tUsers do
  26. if tUsers[i] == sPlayer then
  27. return true
  28. end
  29. end
  30. return false
  31. end
  32.  
  33. function parseChat( sUser, sMessage )
  34. local tArgs = {}
  35. for sArg in sMessage:gmatch( "%S+" ) do
  36. table.insert( tArgs, sArg )
  37. end
  38. print( sUser .. " ran command " .. tArgs[1] .. "!" )
  39. if tArgs[1] == "clear" then
  40. local oUser = oGlasses.getUserSurface( sUser )
  41. oUser.clear()
  42. elseif tArgs[1] == "page" then
  43. if tonumber( tArgs[2] ) then
  44. showMenu( sUser, tonumber( tArgs[2] ) )
  45. end
  46. end
  47. end
  48.  
  49. --Money Functions
  50.  
  51. function getPrices()
  52. oPrices = fs.open( "prices", "r" )
  53. tPrices = textutils.unserialize( oPrices.readAll() )
  54. oPrices.close()
  55. return tPrices
  56. end
  57.  
  58. function getBalances()
  59. local oFile = fs.open( "balances", "r" )
  60. local tBalances = textutils.unserialize( oFile.readAll() )
  61. oFile.close()
  62. return tBalances
  63. end
  64.  
  65. function saveBalances( tSaveBalances )
  66. local oFile = fs.open( "balances", "w" )
  67. oFile.write( textutils.serialize( tSaveBalances ) )
  68. oFile.close()
  69. end
  70.  
  71. function getBalance( sPlayer )
  72. return getBalances()[sPlayer]
  73. end
  74.  
  75. function setBalance( sPlayer, nAmount )
  76. local tSetBalances = getBalances()
  77. tSetBalances[sPlayer] = nAmount
  78. saveBalances( tSetBalances )
  79. end
  80.  
  81. --Drawing Functions
  82.  
  83. function redrawMonitor()
  84. if oPim.getInventoryName() ~= "pim" then
  85. bFound = false
  86. for i = 1,#oGlasses.getUsers() do
  87. if oGlasses.getUsers()[i] == oPim.getInventoryName() then
  88. bFound = true
  89. end
  90. end
  91. term.redirect( oMonitor )
  92. term.setCursorPos( 1, 2 )
  93. if not bFound then
  94. cPrint( "You must equip your shop terminal Glasses!", 2 )
  95. else
  96. cPrint( "Welcome, " .. oPim.getInventoryName() .. "!" ,3 )
  97. cPrint( "You have your Glasses Equipped.", 4 )
  98. cPrint( "Check the menu by entering $$page <number> in chat", 6 )
  99. end
  100. term.restore()
  101. end
  102. end
  103.  
  104. function showMenu( sPlayer, nPage )
  105. nPer = 5
  106. nCount = 1
  107. nCountShown = 1
  108. oUser = oGlasses.getUserSurface( sPlayer )
  109. oUser.clear()
  110. oUser.addText( 10, 10, "Menu Page " .. nPage .. " - " .. nPer .. " results per page!" .. sGOptions, 0xFFFFFF )
  111. for sItem, tItem in pairs( getPrices() ) do
  112. if nCount >= ( nPer*nPage )-nPer+1 and nCount <= ( nPer*nPage ) then
  113. oUser.addIcon( 10, 10+(20*nCountShown), tonumber( sItem ), tItem["meta"] )
  114. oUser.addText( 27, 14+(20*nCountShown), "$" .. tItem["price"] .. "/item for " .. tItem["name"] .. ":" .. tItem["meta"], 0xFFFFFF )
  115. nCountShown = nCountShown+1
  116. end
  117. nCount = nCount + 1
  118. end
  119. end
  120.  
  121. --Start of Main loop
  122. os.startTimer( 0.1 )
  123. while true do
  124. tUsers = oGlasses.getUsers()
  125. for i = 1,#tUsers do
  126. if getBalance( tUsers[i] ) == nil then
  127. setBalance( tUsers[i], 0 )
  128. end
  129. end
  130. tEvent = { os.pullEvent() }
  131. term.redirect( oMonitor )
  132. tSize = { term.getSize() }
  133. term.setBackgroundColor( colors.white )
  134. term.setTextColor( colors.black )
  135. term.clear()
  136. term.setBackgroundColor( colors.green )
  137. drawBar( 1 )
  138. drawBar( tSize[2] )
  139. cPrint( "Cammuno Shopping Mall", 1 )
  140. if oPim.getInventoryName() ~= "pim" then
  141. cPrint( "Welcome, " .. oPim.getInventoryName() .. "! =)", tSize[2] )
  142. end
  143. term.setBackgroundColor( colors.white )
  144. redrawMonitor()
  145. term.restore()
  146. if tEvent[1] == "player_on" or tEvent[1] == "player_off" then
  147. if tEvent[1] == "player_on" then
  148. sCurrentPlayer = tEvent[2]
  149. end
  150. elseif tEvent[1] == "chat_command" then
  151. parseChat( tEvent[3], tEvent[2] )
  152. end
  153. if tEvent[1] == "player_off" then
  154. if sCurrentPlayer ~= nil then
  155. if checkGlasses( sCurrentPlayer ) then
  156. local oUser = oGlasses.getUserSurface( sCurrentPlayer )
  157. oUser.clear()
  158. end
  159. end
  160. end
  161. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement