Advertisement
johnnic431

Clay Soldiers

Jun 29th, 2015
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 9.36 KB | None | 0 0
  1. --[[Clay Soldiers Arena
  2.  
  3. Sylvyrfysh - All Rights Reserved
  4. Unauthorized copying, and/or redistribution of this file, via any medium without express written permission of Sylvyrfysh (Nicholas Johnson) is strictly prohibited
  5. Proprietary and confidential
  6. Written by Nicholas Johnson <johnnic431@gmail.com>, June 27 2015
  7.  
  8. ]]
  9.  
  10. local modem,monitor
  11. local oTerm
  12. local loggedIn=nil
  13. local people={}
  14.  
  15. os.loadAPI(".clayArena/apis/button")
  16. os.loadAPI(".clayArena/apis/modemAuth")
  17.  
  18. local values={
  19.     totalPoints=50,
  20.     tSlotSelected=1,
  21.     tGet={},
  22.     pTotal=0,
  23.     loadSteps=5,
  24.     maxItemsPerType=16,
  25.     isSideReady=false,
  26.     canRetrieve=true,
  27.     items={
  28.         {name="Soldier",cost=1,tSlot=1,description="Fights for you"},
  29.         {name="Leather",cost=2,tSlot=2,description="Soldiers armor"},
  30.         {name="Snowball",cost=2,tSlot=3,description="Range weapon, slows opponents"},
  31.         {name="Shearblade",cost=1,tSlot=4,maxAmount=1,description="Increases attack, soldiers can dual wield."},
  32.         {name="Blaze Rod",cost=2,tSlot=5,description="Sets opponents on fire and increases attack"},
  33.         {name="Gold Bar",cost=2,tSlot=6,maxAmount=1,description="Gives your king armor"},
  34.         {name="Iron Ingot",cost=2,tSlot=7,description="Increases damage and decreases knockback"},
  35.         {name="Redstone",cost=2,tSlot=8,description="Temporarily paralyzes an opponent"},
  36.         {name="Bowl",cost=1,tSlot=9,description="Gives a soldier a shield"},
  37.         {name="Flint",cost=1,tSlot=10,description="Sharpens sticks into spears"},
  38.         {name="Stick",cost=1,tSlot=11,description="Increases attack"},
  39.         {name="Sugar",cost=1,tSlot=12,description="Increases soldiers speed"},
  40.         {name="Iron Block",cost=3,tSlot=13,maxAmount=1,description="Increases soldiers attack and shielding"},
  41.         {name="Coal",cost=1,tSlot=14,description="If holding blaze rod, increases burn time."}
  42.     },
  43.     buttons={
  44.         addButton=1,                            --Add one of specified items
  45.         removeButton=2,                         --Remove one of specified items
  46.         retrieveButton=3,                       --Get items from turtle (turtleRequestFromSlot)
  47.         returnButton=4,                         --Send items back to turtle (turtleReturns)
  48.         toggleReadyButton=5,                    --Tell server ready to start game (readyChannel)
  49.         loginButton=6,                          --Logs in player based on their tablet
  50.         finalButtonCount=6,
  51.     },
  52.     colors={
  53.         tcol=colors.black,
  54.         firstColor=colors.cyan,
  55.         secondColor=colors.green,
  56.     },
  57.     wireless={
  58.         readyChannel=7780,                      --When the team is ready/unready to fight: Client>Server
  59.         gameStartChannel=7781,                  --Three second tiimer to game start Server>Client
  60.         gameEndChannel=7782,                    --When the game ends, with an admin watching Server>Client
  61.         sidePreparedChannel=7783,               --When a side has been restocked with all the items used Client>Server
  62.         gameReadyToStartChannel=7784,           --When the game is ready to be played again: Server>Client
  63.         turtleRequestFromSlot=7790,             --Client telling turtle to send requested items Client>Turtle (Distance-Specific)
  64.         turtleReturns=7791,                     --Client telling turtle to take in returns Client>Turtle (Distance-Specific)
  65.         turtleRespondReturns=7792,              --Turtle telling client items returned
  66.         turtleGameOver=7793,                    --Client telling turtle to take all items in until gameReadyToStart state
  67.     }
  68. }
  69.  
  70. local screen={
  71.     buttons={},
  72. }
  73.  
  74. local function writeTextSpecificCentered(text,sX,eX,y,tCol)
  75.     if text==nil or y<=0 then return false; end
  76.     sValue=(((eX+1)-sX)-string.len(text))/2;
  77.     if tCol then term.setTextColor(tCol) end
  78.     term.setCursorPos(sValue+sX,y);
  79.     term.write(text);
  80.     term.setBackgroundColor(colors.green)
  81. end
  82.  
  83. local function drawLoadingScreen(count,total,info)
  84.     local sX,sY=term.getSize()
  85.     term.setBackgroundColor(colors.white)
  86.     paintutils.drawLine(1,6,sX,6,colors.white)
  87.     writeTextSpecificCentered(info,1,sX,6,colors.blue)
  88.     paintutils.drawLine(2,8,1+((count*(sX-2))/total),8,colors.green)
  89. end
  90.  
  91. local function eventLoop()
  92.     while true do
  93.         e={os.pullEvent()}
  94.         if e[1]=="monitor_touch" then
  95.             for t,y in pairs(screen.buttons) do
  96.                 y:clickAt(e[3],e[4])
  97.             end
  98.         end
  99.     end
  100. end
  101.  
  102. local function addOne()
  103.     if values.tGet[values.tSlotSelected]<(values.items[values.tSlotSelected].maxAmount or values.maxItemsPerType) then
  104.         if (values.items[values.tSlotSelected].cost+values.pTotal)<=50 then
  105.             values.tGet[values.tSlotSelected]=values.tGet[values.tSlotSelected]+1
  106.             values.pTotal=values.items[values.tSlotSelected].cost+values.pTotal
  107.             screen.buttons[values.buttons.finalButtonCount+values.tSlotSelected]:setText(values.items[values.tSlotSelected].name.."("..values.tGet[values.tSlotSelected]..")"):draw()
  108.             term.setCursorPos(16,11)
  109.             term.setBackgroundColor(colors.white)
  110.             term.write((50-values.pTotal).." ")
  111.         end
  112.     end
  113. end
  114.  
  115. local function init()
  116.     modem=peripheral.wrap("right")
  117.     modem.open(values.wireless.turtleRespondReturns);
  118.     modem.open(values.wireless.gameStartChannel)
  119.     modem.open(values.wireless.gameReadyToStartChannel)
  120.     modem.open(values.wireless.gameEndChannel)
  121.     modemAuth.init(modem)
  122.     monitor=peripheral.wrap("top")
  123.     oTerm=term.redirect(monitor)
  124.     term.clear()
  125.     local sX,sY=term.getSize()
  126.     paintutils.drawFilledBox(1,1,sX,sY,colors.white)
  127.     paintutils.drawBox(1,7,sX,9,colors.lightGray)
  128.     drawLoadingScreen(3,values.loadSteps,"Initializing tGet...");
  129.     for i=1,#values.items do
  130.         values.tGet[i]=0;
  131.     end
  132.     drawLoadingScreen(4,values.loadSteps,"Initializing buttons..");
  133.     screen.buttons[values.buttons.addButton]=(button:init()
  134.     :setBackColor(values.colors.firstColor)
  135.     :setTextColor(values.colors.tcol)
  136.     :setLoc(23,12)
  137.     :setSize(7,1)
  138.     :setOnClick(addOne)
  139.     :setText("Add One")
  140.     :setVisible(true))
  141.     screen.buttons[values.buttons.removeButton]=(button:init()
  142.     :setBackColor(values.colors.firstColor)
  143.     :setTextColor(values.colors.tcol)
  144.     :setLoc(1,12)
  145.     :setSize(10,1)
  146.     :setOnClick(function()
  147.         if values.tGet[values.tSlotSelected]>0 then
  148.             values.tGet[values.tSlotSelected]=values.tGet[values.tSlotSelected]-1
  149.             values.pTotal=values.pTotal-values.items[values.tSlotSelected].cost
  150.             screen.buttons[values.buttons.finalButtonCount+values.tSlotSelected]:setText(values.items[values.tSlotSelected].name.."("..values.tGet[values.tSlotSelected]..")"):draw()
  151.             term.setCursorPos(16,11)
  152.             term.setBackgroundColor(colors.white)
  153.             term.write((50-values.pTotal).." ")
  154.         end
  155.     end)
  156.     :setText("Remove One")
  157.     :setVisible(true))
  158.     screen.buttons[values.buttons.retrieveButton]=(button:init()
  159.     :setBackColor(values.colors.secondColor)
  160.     :setTextColor(values.colors.tcol)
  161.     :setLoc(21,11)
  162.     :setSize(9,1)
  163.     :setOnClick(function()
  164.         if not values.canRetrieve then return end
  165.         values.canRetrieve=false
  166.         for i=1,#values.items do
  167.             modem.transmit(values.wireless.turtleRequestFromSlot,i,values.tGet[1])
  168.         end
  169.         screen.buttons[values.buttons.retrieveButton]:setBackColor(colors.red):draw()
  170.     end)
  171.     :setText("Get Items")
  172.     :setVisible(true))
  173.     screen.buttons[values.buttons.returnButton]=(button:init()
  174.     :setBackColor(values.colors.secondColor)
  175.     :setTextColor(values.colors.tcol)
  176.     :setLoc(14,12)
  177.     :setSize(6,1)
  178.     :setOnClick(function()
  179.         modem.transmit(values.wireless.turtleReturns,values.wireless.turtleReturns,"getItems")
  180.         f=false
  181.         while not f do
  182.             --[[e={os.pullEvent("modem_message")}
  183.             if e[6]<5 then
  184.                 values.pTotal=values.pTotal+tonumber(e[5])]]
  185.                 f=true;
  186.             --end
  187.         end
  188.     end)
  189.     :setText("Return")
  190.     :setVisible(true))
  191.     screen.buttons[values.buttons.toggleReadyButton]=(button:init()
  192.     :setBackColor(colors.red)
  193.     :setTextColor(values.colors.tcol)
  194.     :setLoc(1,11)
  195.     :setSize(12,1)
  196.     :setOnClick(function()
  197.         values.isSideReady=not values.isSideReady
  198.         if values.isSideReady then
  199.             screen.buttons[values.buttons.toggleReadyButton]:setBackColor(colors.green)
  200.         else
  201.             screen.buttons[values.buttons.toggleReadyButton]:setBackColor(colors.red)
  202.         end
  203.         screen.buttons[values.buttons.toggleReadyButton]:draw()
  204.         modem.transmit(values.wireless.readyChannel,values.wireless.readyChannel,values.isSideReady)
  205.     end)
  206.     :setText("Toggle Ready")
  207.     :setVisible(true))
  208.     screen.buttons[values.buttons.loginButton]=(button:init()
  209.     :setBackColor(values.colors.secondColor)
  210.     :setTextColor(values.colors.tcol)
  211.     :setLoc(1,10)
  212.     :setSize(5,1)
  213.     :setOnClick(function()
  214.         --[[if not loggedIn then
  215.             ppl=modemAuth.requestPing(6,"fingerprint")
  216.             for t,y in pairs(ppl) do
  217.                 if people[y] then
  218.                     loggedIn=people[y]
  219.                     screen.buttons[values.buttons.loginButton]:setText("Logged in: "..loggedIn)
  220.                     break;
  221.                 end
  222.             end
  223.         end]]
  224.     end)
  225.     :setText("Login")
  226.     :setVisible(true))
  227.     lx=1
  228.     ly=1
  229.     for i=1,#values.items do
  230.         screen.buttons[#screen.buttons+1]=(button:init()
  231.         :setBackColor(colors.cyan)
  232.         :setTextColor(values.colors.tcol)
  233.         :setSize(14,1)
  234.         :setLoc(lx,ly)
  235.         :setOnClick(function()
  236.             paintutils.drawLine(1,8,sX,8,colors.white)
  237.             paintutils.drawLine(1,9,sX,9,colors.white)
  238.             term.setCursorPos(1,8)
  239.             term.setTextColor(values.colors.tcol)
  240.             write(values.items[i].description)
  241.             values.tSlotSelected=i;
  242.             for o=values.buttons.finalButtonCount+1,#values.items+values.buttons.finalButtonCount do
  243.                 screen.buttons[o]:setBackColor(colors.cyan):draw()
  244.             end
  245.             screen.buttons[i+values.buttons.finalButtonCount]:setBackColor(colors.yellow):draw()
  246.         end)
  247.         :setText(values.items[i].name.."(0)")
  248.         :setVisible(true))
  249.         if lx==1 then
  250.             lx=16
  251.         else
  252.             lx=1
  253.             ly=ly+1
  254.         end
  255.     end
  256.    
  257.    
  258.    
  259.    
  260.     paintutils.drawFilledBox(1,1,sX,sY,colors.white)
  261.     for i=1,values.buttons.finalButtonCount+#values.items do
  262.         screen.buttons[i]:draw()
  263.     end
  264.    
  265.     eventLoop()
  266.    
  267. end
  268.  
  269. ok,err=pcall(init)
  270. term.redirect(oTerm)
  271. print(err)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement