Advertisement
WhamyKaBlamy

ComputerCraft Controlled Villager Trading

Sep 26th, 2015
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.62 KB | None | 0 0
  1. --Variables to be changed:
  2. local Trade_Post_Side = "right"
  3. local Monitor_Side = "left"
  4. --Don't change below here:
  5. local TradePost = peripheral.wrap(Trade_Post_Side)
  6. local Monitor = peripheral.wrap(Monitor_Side)
  7.  
  8. local Main_Exit = false
  9. local Trades_Available = {}
  10. local Page_Number = 0
  11. Monitor.setTextScale(0.5)
  12. local Monitor_Width,Monitor_Height = Monitor.getSize()
  13. local Adjusted_Monitor = Monitor_Height - 3
  14.  
  15. function Get_List()
  16.   Trades_Available = {}
  17.   local Villager_Info = TradePost.getVillagerIds()
  18.   if Villager_Info ~= nil then
  19.     for i,v in pairs(Villager_Info) do
  20.       local Num_Of_Trades = TradePost.getNumTrades(v)
  21.       for x=1, Num_Of_Trades do
  22.         local Construct = {}
  23.         Construct["VillagerID"] = v
  24.         Construct["TradeNumber"] = x-1
  25.         Construct["FirstBought"] = TradePost.getItemBought(v,x-1)["name"]
  26.         Construct["FirstQTY"] = TradePost.getItemBought(v,x-1)["qty"]
  27.         if TradePost.getSecondItemBought(v,x-1) ~= nil then
  28.           Construct["SecondBought"] = TradePost.getSecondItemBought(v,x-1)["name"]
  29.           Construct["SecondQTY"] = TradePost.getSecondItemBought(v,x-1)["qty"]
  30.         end
  31.         Construct["SoldItem"] = TradePost.getItemSold(v,x-1)["name"]
  32.         Construct["SoldQTY"] = TradePost.getItemSold(v,x-1)["qty"]
  33.         table.insert(Trades_Available,Construct)
  34.       end
  35.     end
  36.   end
  37. end
  38.  
  39. function List_Trades(page)
  40.   Monitor_Width, Monitor_Height = Monitor.getSize()
  41.   Adjusted_Monitor = Monitor_Height - 3
  42.   Monitor.clear()
  43.   Get_List()
  44.   if Trades_Available ~= nil then
  45.     if page < 0 then
  46.       page = math.floor(#Trades_Available / Adjusted_Monitor)
  47.     end
  48.     if (page * Adjusted_Monitor) >= #Trades_Available then
  49.       page = 0
  50.     end
  51.     local Display_Counter
  52.     if #Trades_Available - (page * Adjusted_Monitor) > Adjusted_Monitor then
  53.       Display_Counter = (page * Adjusted_Monitor) + Adjusted_Monitor
  54.     else
  55.       Display_Counter = #Trades_Available
  56.     end
  57.     for i= 1+(page * Adjusted_Monitor), Display_Counter do
  58.       local Info = Trades_Available[i]
  59.       Monitor.setCursorPos(1,i-(page*Adjusted_Monitor)+1)
  60.       Monitor.write(Info["FirstQTY"].." "..Info["FirstBought"])
  61.       if Info["SecondBought"] ~= nil then
  62.         Monitor.write(" + "..Info["SecondQTY"].." "..Info["SecondBought"])
  63.       end
  64.       Monitor.setCursorPos(math.floor(Monitor_Width/2),i-(page*Adjusted_Monitor)+1)
  65.       Monitor.write("| ->"..Info["SoldQTY"].." "..Info["SoldItem"])
  66.     end
  67.   end
  68.   Monitor.setCursorPos(math.floor(Monitor_Width/4),1)
  69.   Monitor.write("BUYING")
  70.   Monitor.setCursorPos(Monitor_Width-math.floor(Monitor_Width/4),1)
  71.   Monitor.write("SELLING")
  72.   Monitor.setCursorPos(1,Monitor_Height)
  73.   Monitor.write("Check PgUp PgDn Page:"..page)
  74.   Monitor.setCursorPos(Monitor_Width-4,Monitor_Height)
  75.   Monitor.write("Quit")
  76.   return page
  77. end
  78.  
  79. List_Trades(0)
  80.  
  81. while Main_Exit == false do
  82.   local event, side, x_pos, y_pos = os.pullEvent("monitor_touch")
  83.   if y_pos == Monitor_Height then
  84.     if x_pos <= 5 then
  85.       Page_Number = List_Trades(Page_Number)
  86.     elseif x_pos >= 7 and x_pos <= 10 then
  87.       Page_Number = List_Trades(Page_Number+1)
  88.     elseif x_pos >= 12 and x_pos <= 15 then
  89.       Page_Number = List_Trades(Page_Number-1)
  90.     elseif x_pos >= (Monitor_Width - 4) then
  91.       Monitor.clear()
  92.       Main_Exit = true
  93.     end
  94.   elseif y_pos >= 2 then
  95.     local List_Pos = (y_pos - 1)+(Page_Number * Adjusted_Monitor)
  96.     if Trades_Available[List_Pos] ~= nil then
  97.       local Trade_Info = Trades_Available[List_Pos]
  98.       TradePost.performTrade(Trade_Info["VillagerID"],Trade_Info["TradeNumber"])
  99.     end
  100.   end
  101. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement