Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[Clay Soldiers Arena
- Sylvyrfysh - All Rights Reserved
- Unauthorized copying, and/or redistribution of this file, via any medium without express written permission of Sylvyrfysh (Nicholas Johnson) is strictly prohibited
- Proprietary and confidential
- Written by Nicholas Johnson <johnnic431@gmail.com>, June 27 2015
- ]]
- local modem,monitor
- local oTerm
- local loggedIn=nil
- local people={}
- os.loadAPI(".clayArena/apis/button")
- os.loadAPI(".clayArena/apis/modemAuth")
- local values={
- totalPoints=50,
- tSlotSelected=1,
- tGet={},
- pTotal=0,
- loadSteps=5,
- maxItemsPerType=16,
- isSideReady=false,
- canRetrieve=true,
- items={
- {name="Soldier",cost=1,tSlot=1,description="Fights for you"},
- {name="Leather",cost=2,tSlot=2,description="Soldiers armor"},
- {name="Snowball",cost=2,tSlot=3,description="Range weapon, slows opponents"},
- {name="Shearblade",cost=1,tSlot=4,maxAmount=1,description="Increases attack, soldiers can dual wield."},
- {name="Blaze Rod",cost=2,tSlot=5,description="Sets opponents on fire and increases attack"},
- {name="Gold Bar",cost=2,tSlot=6,maxAmount=1,description="Gives your king armor"},
- {name="Iron Ingot",cost=2,tSlot=7,description="Increases damage and decreases knockback"},
- {name="Redstone",cost=2,tSlot=8,description="Temporarily paralyzes an opponent"},
- {name="Bowl",cost=1,tSlot=9,description="Gives a soldier a shield"},
- {name="Flint",cost=1,tSlot=10,description="Sharpens sticks into spears"},
- {name="Stick",cost=1,tSlot=11,description="Increases attack"},
- {name="Sugar",cost=1,tSlot=12,description="Increases soldiers speed"},
- {name="Iron Block",cost=3,tSlot=13,maxAmount=1,description="Increases soldiers attack and shielding"},
- {name="Coal",cost=1,tSlot=14,description="If holding blaze rod, increases burn time."}
- },
- buttons={
- addButton=1, --Add one of specified items
- removeButton=2, --Remove one of specified items
- retrieveButton=3, --Get items from turtle (turtleRequestFromSlot)
- returnButton=4, --Send items back to turtle (turtleReturns)
- toggleReadyButton=5, --Tell server ready to start game (readyChannel)
- loginButton=6, --Logs in player based on their tablet
- finalButtonCount=6,
- },
- colors={
- tcol=colors.black,
- firstColor=colors.cyan,
- secondColor=colors.green,
- },
- wireless={
- readyChannel=7780, --When the team is ready/unready to fight: Client>Server
- gameStartChannel=7781, --Three second tiimer to game start Server>Client
- gameEndChannel=7782, --When the game ends, with an admin watching Server>Client
- sidePreparedChannel=7783, --When a side has been restocked with all the items used Client>Server
- gameReadyToStartChannel=7784, --When the game is ready to be played again: Server>Client
- turtleRequestFromSlot=7790, --Client telling turtle to send requested items Client>Turtle (Distance-Specific)
- turtleReturns=7791, --Client telling turtle to take in returns Client>Turtle (Distance-Specific)
- turtleRespondReturns=7792, --Turtle telling client items returned
- turtleGameOver=7793, --Client telling turtle to take all items in until gameReadyToStart state
- }
- }
- local screen={
- buttons={},
- }
- local function writeTextSpecificCentered(text,sX,eX,y,tCol)
- if text==nil or y<=0 then return false; end
- sValue=(((eX+1)-sX)-string.len(text))/2;
- if tCol then term.setTextColor(tCol) end
- term.setCursorPos(sValue+sX,y);
- term.write(text);
- term.setBackgroundColor(colors.green)
- end
- local function drawLoadingScreen(count,total,info)
- local sX,sY=term.getSize()
- term.setBackgroundColor(colors.white)
- paintutils.drawLine(1,6,sX,6,colors.white)
- writeTextSpecificCentered(info,1,sX,6,colors.blue)
- paintutils.drawLine(2,8,1+((count*(sX-2))/total),8,colors.green)
- end
- local function eventLoop()
- while true do
- e={os.pullEvent()}
- if e[1]=="monitor_touch" then
- for t,y in pairs(screen.buttons) do
- y:clickAt(e[3],e[4])
- end
- end
- end
- end
- local function addOne()
- if values.tGet[values.tSlotSelected]<(values.items[values.tSlotSelected].maxAmount or values.maxItemsPerType) then
- if (values.items[values.tSlotSelected].cost+values.pTotal)<=50 then
- values.tGet[values.tSlotSelected]=values.tGet[values.tSlotSelected]+1
- values.pTotal=values.items[values.tSlotSelected].cost+values.pTotal
- screen.buttons[values.buttons.finalButtonCount+values.tSlotSelected]:setText(values.items[values.tSlotSelected].name.."("..values.tGet[values.tSlotSelected]..")"):draw()
- term.setCursorPos(16,11)
- term.setBackgroundColor(colors.white)
- term.write((50-values.pTotal).." ")
- end
- end
- end
- local function init()
- modem=peripheral.wrap("right")
- modem.open(values.wireless.turtleRespondReturns);
- modem.open(values.wireless.gameStartChannel)
- modem.open(values.wireless.gameReadyToStartChannel)
- modem.open(values.wireless.gameEndChannel)
- modemAuth.init(modem)
- monitor=peripheral.wrap("top")
- oTerm=term.redirect(monitor)
- term.clear()
- local sX,sY=term.getSize()
- paintutils.drawFilledBox(1,1,sX,sY,colors.white)
- paintutils.drawBox(1,7,sX,9,colors.lightGray)
- drawLoadingScreen(3,values.loadSteps,"Initializing tGet...");
- for i=1,#values.items do
- values.tGet[i]=0;
- end
- drawLoadingScreen(4,values.loadSteps,"Initializing buttons..");
- screen.buttons[values.buttons.addButton]=(button:init()
- :setBackColor(values.colors.firstColor)
- :setTextColor(values.colors.tcol)
- :setLoc(23,12)
- :setSize(7,1)
- :setOnClick(addOne)
- :setText("Add One")
- :setVisible(true))
- screen.buttons[values.buttons.removeButton]=(button:init()
- :setBackColor(values.colors.firstColor)
- :setTextColor(values.colors.tcol)
- :setLoc(1,12)
- :setSize(10,1)
- :setOnClick(function()
- if values.tGet[values.tSlotSelected]>0 then
- values.tGet[values.tSlotSelected]=values.tGet[values.tSlotSelected]-1
- values.pTotal=values.pTotal-values.items[values.tSlotSelected].cost
- screen.buttons[values.buttons.finalButtonCount+values.tSlotSelected]:setText(values.items[values.tSlotSelected].name.."("..values.tGet[values.tSlotSelected]..")"):draw()
- term.setCursorPos(16,11)
- term.setBackgroundColor(colors.white)
- term.write((50-values.pTotal).." ")
- end
- end)
- :setText("Remove One")
- :setVisible(true))
- screen.buttons[values.buttons.retrieveButton]=(button:init()
- :setBackColor(values.colors.secondColor)
- :setTextColor(values.colors.tcol)
- :setLoc(21,11)
- :setSize(9,1)
- :setOnClick(function()
- if not values.canRetrieve then return end
- values.canRetrieve=false
- for i=1,#values.items do
- modem.transmit(values.wireless.turtleRequestFromSlot,i,values.tGet[1])
- end
- screen.buttons[values.buttons.retrieveButton]:setBackColor(colors.red):draw()
- end)
- :setText("Get Items")
- :setVisible(true))
- screen.buttons[values.buttons.returnButton]=(button:init()
- :setBackColor(values.colors.secondColor)
- :setTextColor(values.colors.tcol)
- :setLoc(14,12)
- :setSize(6,1)
- :setOnClick(function()
- modem.transmit(values.wireless.turtleReturns,values.wireless.turtleReturns,"getItems")
- f=false
- while not f do
- --[[e={os.pullEvent("modem_message")}
- if e[6]<5 then
- values.pTotal=values.pTotal+tonumber(e[5])]]
- f=true;
- --end
- end
- end)
- :setText("Return")
- :setVisible(true))
- screen.buttons[values.buttons.toggleReadyButton]=(button:init()
- :setBackColor(colors.red)
- :setTextColor(values.colors.tcol)
- :setLoc(1,11)
- :setSize(12,1)
- :setOnClick(function()
- values.isSideReady=not values.isSideReady
- if values.isSideReady then
- screen.buttons[values.buttons.toggleReadyButton]:setBackColor(colors.green)
- else
- screen.buttons[values.buttons.toggleReadyButton]:setBackColor(colors.red)
- end
- screen.buttons[values.buttons.toggleReadyButton]:draw()
- modem.transmit(values.wireless.readyChannel,values.wireless.readyChannel,values.isSideReady)
- end)
- :setText("Toggle Ready")
- :setVisible(true))
- screen.buttons[values.buttons.loginButton]=(button:init()
- :setBackColor(values.colors.secondColor)
- :setTextColor(values.colors.tcol)
- :setLoc(1,10)
- :setSize(5,1)
- :setOnClick(function()
- --[[if not loggedIn then
- ppl=modemAuth.requestPing(6,"fingerprint")
- for t,y in pairs(ppl) do
- if people[y] then
- loggedIn=people[y]
- screen.buttons[values.buttons.loginButton]:setText("Logged in: "..loggedIn)
- break;
- end
- end
- end]]
- end)
- :setText("Login")
- :setVisible(true))
- lx=1
- ly=1
- for i=1,#values.items do
- screen.buttons[#screen.buttons+1]=(button:init()
- :setBackColor(colors.cyan)
- :setTextColor(values.colors.tcol)
- :setSize(14,1)
- :setLoc(lx,ly)
- :setOnClick(function()
- paintutils.drawLine(1,8,sX,8,colors.white)
- paintutils.drawLine(1,9,sX,9,colors.white)
- term.setCursorPos(1,8)
- term.setTextColor(values.colors.tcol)
- write(values.items[i].description)
- values.tSlotSelected=i;
- for o=values.buttons.finalButtonCount+1,#values.items+values.buttons.finalButtonCount do
- screen.buttons[o]:setBackColor(colors.cyan):draw()
- end
- screen.buttons[i+values.buttons.finalButtonCount]:setBackColor(colors.yellow):draw()
- end)
- :setText(values.items[i].name.."(0)")
- :setVisible(true))
- if lx==1 then
- lx=16
- else
- lx=1
- ly=ly+1
- end
- end
- paintutils.drawFilledBox(1,1,sX,sY,colors.white)
- for i=1,values.buttons.finalButtonCount+#values.items do
- screen.buttons[i]:draw()
- end
- eventLoop()
- end
- ok,err=pcall(init)
- term.redirect(oTerm)
- print(err)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement