Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --|============================|
- --| OpenChest. |
- --| Автор: SkyDrive_ |
- --| Проект McSkill, cервер HTC |
- --| 30.03.2017 |
- --| Version: 2.02 |
- --|============================|
- local component = require("component")
- local computer=require("computer")
- local event = require("event")
- local term = require("term")
- local shell = require("shell")
- local fs = require("filesystem")
- local unicode=require("unicode")
- local serial = require("serialization")
- if not fs.exists("/lib/Sky.lua") then
- shell.execute("wget https://www.dropbox.com/s/ct5zsbm81zir7w2/Sky%28lib%29.lua?dl=1 /lib/Sky.lua")
- end
- local Sky = require("Sky")
- local g = component.gpu
- event.shouldInterrupt = function () return false end
- --------------------Настройки--------------------
- local WIGHT, HEIGHT = 146, 42 --Разрешение моника 146/112 x 42
- local AUTOEXIT = 30 --Автовыход через n сек.
- local PRICE = 20 --Цена одной игры в эмах (Целое число)
- local COLOR1 = 0x00ffff --Рамка
- local COLOR2 = 0x0000ff --Цвет кнопок
- local TONE = 600 --Тональность звука
- local RED = 0 --Сторона редстоун блока
- local CHAT_NAME = "§8[§2OpenChest§8]: " --Ник чатбокса
- -------------------------------------------------
- --Файлик Chest.lua
- --Максимум 27 предметов, иначае спсиок заедет на кнопку, а прокрутку делать лень чота \(^o^)/
- --[1] - Кол-во, [2] - Название, [3] - Шанс, [4] - Цвет, [5] - id:meta
- --Шанс - это сколько раз указанный предмет встретится в списке(Например Земли будет в списке 30шт. Гравик 2 шт. и т.д.)
- if not (fs.exists(shell.getWorkingDirectory() .. "/Chest.lua")) then
- shell.execute("wget https://www.dropbox.com/s/m0g9lisut17oevm/Chest.lua?dl=1")
- end
- if not (fs.exists(shell.getWorkingDirectory() .. "/ChestImage.lua")) then
- shell.execute("wget https://www.dropbox.com/s/q2d9ixb70uvjxz5/ChestImage.lua?dl=1")
- end
- if not (fs.exists(shell.getWorkingDirectory() .. "/LogoChest.lua")) then
- shell.execute("wget https://www.dropbox.com/s/xmvc879otyie9nl/LogoChest.lua?dl=1")
- end
- print("\nИнициализация...")
- os.sleep(2)
- print("Запуск программы...")
- os.sleep(2)
- print("\nНе забудьте настроить Chest.lua")
- os.sleep(3)
- file = io.open(shell.getWorkingDirectory() .. "/Chest.lua", "r")
- local ITEMS = serial.unserialize("{" .. file:read(9999999) .. "}")
- file:close()
- local mid = (WIGHT-32)/2+32
- local login = false
- local timer = 0
- local items_all = {}
- local summa = 0
- local smile = false
- local summa_money
- local AppItemps = {}
- component.chat_box.setName("§6G§7")
- WIGHT, HEIGHT = Sky.Resolution(WIGHT, HEIGHT)
- Sky.Ram("OpenChest", COLOR1,COLOR2,WIGHT, HEIGHT)
- function isEnable(id,count)
- AppItemps=component.me_interface.getAvailableItems()
- flag = false
- for i=1,#AppItemps do
- if id==AppItemps[i].fingerprint.id then
- if count<=AppItemps[i].size then
- flag = true
- end
- end
- end
- return flag
- end
- function takeMoney(nick)
- tempMoney=0
- for i=1,118 do
- if component.crystal.getStackInSlot(i)~= nil then
- temp=component.crystal.getStackInSlot(i)
- if temp.id=="customnpcs:npcMoney" then
- tempMoney=tempMoney+(component.crystal.pushItem("Down",i))
- end
- end
- end
- MoneyAdd(nick,tempMoney)
- end
- function isFull()
- for i=1,#ITEMS do
- if isEnable(ITEMS[i][5],ITEMS[i][1]) then
- else
- component.chat_box.say(CHAT_NAME .. "§5 в §4казино§5 не хватает :§4"..ITEMS[i][5])
- os.sleep(1)
- return false
- end
- end
- return true
- end
- function giveItem(id,count)
- AppItemps=component.me_interface.getAvailableItems()
- flag = false
- temp=0
- for i=1,#AppItemps do
- if id==AppItemps[i].fingerprint.id then
- temp=i
- break
- end
- end
- component.me_interface.exportItem(AppItemps[temp].fingerprint,"UP",count)
- end
- function MoneyAdd(nick,count)
- local money = Money(nick)
- money=money+count
- file = io.open(shell.getWorkingDirectory() .. "/MoneyD/" .. nick, "w")
- file:write(money)
- file:close()
- end
- function MoneyRemove(nick,count)
- local money = Money(nick)
- money=money-count
- file = io.open(shell.getWorkingDirectory() .. "/MoneyD/" .. nick, "w")
- file:write(money)
- file:close()
- end
- function Money(nick)
- local money
- if (fs.exists(shell.getWorkingDirectory() .. "/MoneyD/" .. nick)) then
- file = io.open(shell.getWorkingDirectory() .. "/MoneyD/" .. nick, "r")
- money = file:read(9999999)
- else
- file = io.open(shell.getWorkingDirectory() .. "/MoneyD/" .. nick, "w")
- money = 0
- file:write("0")
- file:close()
- end
- return money
- end
- function Check_money(nick, PRICE)
- if (tonumber(Money(nick))>=PRICE) then
- return true
- else
- return false
- end
- end
- function money_all()
- if (fs.exists(shell.getWorkingDirectory() .. "/moneyChest")) then
- file = io.open(shell.getWorkingDirectory() .. "/moneyChest", "r")
- local money = file:read(9999999)
- file:close()
- summa_money = money
- return money
- else
- file = io.open(shell.getWorkingDirectory() .. "/moneyChest", "w")
- file:write("0")
- file:close()
- summa_money = 0
- return "0"
- end
- end
- function Login(w,h,nick)
- if w>=7 and w<=24 and h>=37 and h<=39 then
- if login == false then
- computer.addUser(nick)
- login = true
- Sky.ClearR(WIGHT,HEIGHT)
- g.setForeground(COLOR2)
- Sky.MidL(WIGHT,28,"Добро пожаловать")
- Sky.MidL(WIGHT,31,"Ваш баланс:")
- g.setForeground(COLOR1)
- Sky.MidL(WIGHT,29,nick)
- Sky.MidL(WIGHT,32, "[ " .. Money(nick) .. " ]")
- Sky.Button(7,37,18,3,COLOR1,COLOR2," Выход ")
- Game()
- computer.beep(TONE, 0.05)
- else
- Exit()
- end
- end
- end
- function autoExit()
- timer = timer - 1
- g.setForeground(COLOR2)
- Sky.MidL(WIGHT,35, "Авто выход через: ")
- g.setForeground(COLOR1)
- g.set(24, 35, timer .. " ")
- if (smile) then
- Sky.MidL(WIGHT,26, "__(^o^)__")
- smile = false
- else
- Sky.MidL(WIGHT,26, " \\(^o^)/ ")
- smile = true
- end
- end
- function Rules()
- g.setForeground(COLOR2)
- Sky.MidL(WIGHT,5,"==========================")
- Sky.MidL(WIGHT,7,"==========================")
- Sky.MidL(WIGHT,10,"==========================")
- Sky.MidL(WIGHT,14,"==========================")
- Sky.MidL(WIGHT,18,"==========================")
- Sky.MidL(WIGHT,21,"==========================")
- Sky.MidL(WIGHT,24,"==========================")
- Sky.MidL(WIGHT,22, "Всего потрачено:")
- g.setForeground(COLOR1)
- Sky.MidL(WIGHT,3, "Общая инфа:")
- Sky.MidL(WIGHT,6, "Цена сундука: = " .. PRICE .. "$")
- Sky.MidL(WIGHT,8, "Все шансы указаны")
- Sky.MidL(WIGHT,9, "с точностью до сотых")
- Sky.MidL(WIGHT,11, "Так что не надо плакать")
- Sky.MidL(WIGHT,12, "если вам падает булыга,")
- Sky.MidL(WIGHT,13, "тут уж как повезёт")
- Sky.MidL(WIGHT,15, "Вы играете на свой")
- Sky.MidL(WIGHT,16, "страх и риск")
- Sky.MidL(WIGHT,17, "Эмы не возвращаются")
- Sky.MidL(WIGHT,19, "Не забывайте чекать,")
- Sky.MidL(WIGHT,20, "есть ли слот в инвентаре")
- Sky.MidL(WIGHT,23, money_all() .. " эм.")
- Sky.Button(7,37,18,3,COLOR1,COLOR2,"Залогиниться")
- end
- function Game()
- g.setForeground(COLOR1)
- Sky.MidR(WIGHT,3, "Список предметов в сундуке:")
- Sky.Button(mid - 15,37,30,3,COLOR1,COLOR2, "Открыть сундук -" .. PRICE .. "$")
- for i = 1, #ITEMS do
- g.setForeground(ITEMS[i][4])
- Sky.MidR(WIGHT,i+5, "&3" .. ITEMS[i][1] .. "x&r -- " .. ITEMS[i][2] .. " -- &3" .. Sky.Math_round(ITEMS[i][3] / summa * 100, 2) .. "%")
- end
- end
- function midle(y, text) --Fast Render for Table \/
- len=unicode.len(text)
- x=mid-(len/2)
- g.set(x, y, text)
- end
- function Table(rand)
- local win
- for j = 1, #ITEMS do
- midle(j+5, " ")
- if j == Sky.Math_round(#ITEMS / 2, 0) then
- win = rand
- g.setForeground(COLOR1)
- midle(j+5, ">>>>> " .. items_all[rand][2] .. " <<<<<")
- end
- g.setForeground(items_all[rand][3])
- midle(j+5, items_all[rand][2])
- if rand == #items_all then
- rand = 1
- else
- rand = rand + 1
- end
- end
- return win
- end
- function Start(w,h,nick)
- if w>=mid-15 and w<=mid+14 and h>=37 and h<=39 then
- if(Check_money(nick, PRICE)) then
- if isFull() then
- computer.beep(TONE, 0.05)
- MoneyRemove(nick,PRICE)
- file = io.open(shell.getWorkingDirectory() .. "/moneyChest", "w")
- summa_money = summa_money + PRICE
- file:write(summa_money)
- file:close()
- g.setForeground(COLOR1)
- Sky.MidL(WIGHT,23, summa_money .. " эм.")
- Sky.MidL(WIGHT,35," Идёт игра... ")
- Sky.MidL(WIGHT,32, " [ " .. Money(nick) .. " ] ")
- Sky.MidR(WIGHT,35, " Открываем сундук... ")
- local rand, win = math.random(1, #items_all)
- for i = 1, 90 do
- win = Table(rand)
- if i < 75 then
- os.sleep(0.01)
- elseif i < 85 then
- computer.beep(TONE, 0.05)
- elseif i < 90 then
- computer.beep(TONE, 0.2)
- else
- computer.beep(TONE, 1)
- end
- if rand == #items_all then
- rand = 1
- else
- rand = rand + 1
- end
- end
- giveItem(items_all[win][4],items_all[win][1])
- if items_all[win][2] == "Релокатор" or items_all[win][2] == "Гравитационный жилет" or items_all[win][2] == "Ваджра" or items_all[win][2] == "Солнечная панель 4-ого уровня" then
- component.chat_box.say(CHAT_NAME .. "§5" .. nick .. " §aполучает предмет: §6" .. items_all[win][2] .. "§a, из сундука !")
- os.sleep(1)
- elseif items_all[win][2] == "Солнечная панель 5-ого уровня" then
- component.chat_box.say(CHAT_NAME .. "§5" .. nick .. " §aполучает предмет: §4" .. items_all[win][2] .. "§a, из сундука !")
- os.sleep(1)
- end
- g.setForeground(items_all[win][3])
- Sky.MidR(WIGHT,35, " ")
- Sky.MidR(WIGHT,35, items_all[win][2])
- else
- Sky.MidR(WIGHT,35, " Недостаточно вещей ")
- end
- else
- Sky.MidR(WIGHT,35, " Недостаточно средств ")
- end
- end
- end
- function create_items()
- for i = 1, #ITEMS do
- for j = 1, ITEMS[i][3] do
- summa = summa + 1
- items_all[summa] = {ITEMS[i][1], ITEMS[i][2], ITEMS[i][4], ITEMS[i][5]}
- end
- end
- Sky.Shake(items_all)
- end
- function Exit()
- login = false
- Sky.ClearL(HEIGHT)
- Sky.ClearR(WIGHT,HEIGHT)
- Rules()
- Sky.DrawImage(mid - 21,7, shell.getWorkingDirectory() .. "/LogoChest.lua")
- Sky.DrawImage(mid - 28,20, shell.getWorkingDirectory() .. "/ChestImage.lua")
- local users={computer.users()}
- for i=1, #users do
- computer.removeUser(users[i])
- end
- end
- create_items()
- Exit()
- while true do
- local e,_,w,h,_,nick = event.pull(1, "touch")
- flag = true
- if e == "touch" then
- flag = false
- takeMoney(nick)
- Login(w,h,nick)
- if (login) then
- Start(w,h,nick)
- end
- timer = AUTOEXIT
- end
- if (login) then
- autoExit()
- if timer == 0 then
- Exit()
- end
- else
- local users={computer.users()}
- for i=1, #users do
- computer.removeUser(users[i])
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement