Advertisement
wambot

Casino

Nov 23rd, 2017
672
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.72 KB | None | 0 0
  1. --|============================|
  2. --| OpenChest. |
  3. --| Автор: SkyDrive_ |
  4. --| Проект McSkill, cервер HTC |
  5. --| 30.03.2017 |
  6. --| Version: 2.02 |
  7. --|============================|
  8. local component = require("component")
  9. local computer=require("computer")
  10. local event = require("event")
  11. local term = require("term")
  12. local shell = require("shell")
  13. local fs = require("filesystem")
  14. local unicode=require("unicode")
  15. local serial = require("serialization")
  16. if not fs.exists("/lib/Sky.lua") then
  17. shell.execute("wget https://www.dropbox.com/s/ct5zsbm81zir7w2/Sky%28lib%29.lua?dl=1 /lib/Sky.lua")
  18. end
  19. local Sky = require("Sky")
  20. local g = component.gpu
  21. event.shouldInterrupt = function () return false end
  22. --------------------Настройки--------------------
  23. local WIGHT, HEIGHT = 146, 42 --Разрешение моника 146/112 x 42
  24. local AUTOEXIT = 30 --Автовыход через n сек.
  25. local PRICE = 20 --Цена одной игры в эмах (Целое число)
  26. local COLOR1 = 0x00ffff --Рамка
  27. local COLOR2 = 0x0000ff --Цвет кнопок
  28. local TONE = 600 --Тональность звука
  29. local RED = 0 --Сторона редстоун блока
  30. local CHAT_NAME = "§8[§2OpenChest§8]: " --Ник чатбокса
  31. -------------------------------------------------
  32. --Файлик Chest.lua
  33. --Максимум 27 предметов, иначае спсиок заедет на кнопку, а прокрутку делать лень чота \(^o^)/
  34. --[1] - Кол-во, [2] - Название, [3] - Шанс, [4] - Цвет, [5] - id:meta
  35. --Шанс - это сколько раз указанный предмет встретится в списке(Например Земли будет в списке 30шт. Гравик 2 шт. и т.д.)
  36. if not (fs.exists(shell.getWorkingDirectory() .. "/Chest.lua")) then
  37. shell.execute("wget https://www.dropbox.com/s/m0g9lisut17oevm/Chest.lua?dl=1")
  38. end
  39. if not (fs.exists(shell.getWorkingDirectory() .. "/ChestImage.lua")) then
  40. shell.execute("wget https://www.dropbox.com/s/q2d9ixb70uvjxz5/ChestImage.lua?dl=1")
  41. end
  42. if not (fs.exists(shell.getWorkingDirectory() .. "/LogoChest.lua")) then
  43. shell.execute("wget https://www.dropbox.com/s/xmvc879otyie9nl/LogoChest.lua?dl=1")
  44. end
  45. print("\nИнициализация...")
  46. os.sleep(2)
  47. print("Запуск программы...")
  48. os.sleep(2)
  49. print("\nНе забудьте настроить Chest.lua")
  50. os.sleep(3)
  51.  
  52. file = io.open(shell.getWorkingDirectory() .. "/Chest.lua", "r")
  53. local ITEMS = serial.unserialize("{" .. file:read(9999999) .. "}")
  54. file:close()
  55.  
  56. local mid = (WIGHT-32)/2+32
  57. local login = false
  58. local timer = 0
  59. local items_all = {}
  60. local summa = 0
  61. local smile = false
  62. local summa_money
  63. local AppItemps = {}
  64. component.chat_box.setName("§6G§7")
  65.  
  66. WIGHT, HEIGHT = Sky.Resolution(WIGHT, HEIGHT)
  67. Sky.Ram("OpenChest", COLOR1,COLOR2,WIGHT, HEIGHT)
  68.  
  69. function isEnable(id,count)
  70. AppItemps=component.me_interface.getAvailableItems()
  71. flag = false
  72. for i=1,#AppItemps do
  73. if id==AppItemps[i].fingerprint.id then
  74. if count<=AppItemps[i].size then
  75. flag = true
  76. end
  77. end
  78. end
  79. return flag
  80. end
  81.  
  82. function takeMoney(nick)
  83. tempMoney=0
  84. for i=1,118 do
  85. if component.crystal.getStackInSlot(i)~= nil then
  86. temp=component.crystal.getStackInSlot(i)
  87. if temp.id=="customnpcs:npcMoney" then
  88. tempMoney=tempMoney+(component.crystal.pushItem("Down",i))
  89. end
  90. end
  91. end
  92. MoneyAdd(nick,tempMoney)
  93. end
  94.  
  95. function isFull()
  96. for i=1,#ITEMS do
  97. if isEnable(ITEMS[i][5],ITEMS[i][1]) then
  98. else
  99. component.chat_box.say(CHAT_NAME .. "§5 в §4казино§5 не хватает :§4"..ITEMS[i][5])
  100. os.sleep(1)
  101. return false
  102. end
  103. end
  104. return true
  105. end
  106.  
  107. function giveItem(id,count)
  108. AppItemps=component.me_interface.getAvailableItems()
  109. flag = false
  110. temp=0
  111. for i=1,#AppItemps do
  112. if id==AppItemps[i].fingerprint.id then
  113. temp=i
  114. break
  115. end
  116. end
  117. component.me_interface.exportItem(AppItemps[temp].fingerprint,"UP",count)
  118. end
  119.  
  120. function MoneyAdd(nick,count)
  121. local money = Money(nick)
  122. money=money+count
  123. file = io.open(shell.getWorkingDirectory() .. "/MoneyD/" .. nick, "w")
  124. file:write(money)
  125. file:close()
  126. end
  127.  
  128. function MoneyRemove(nick,count)
  129. local money = Money(nick)
  130. money=money-count
  131. file = io.open(shell.getWorkingDirectory() .. "/MoneyD/" .. nick, "w")
  132. file:write(money)
  133. file:close()
  134. end
  135.  
  136. function Money(nick)
  137. local money
  138. if (fs.exists(shell.getWorkingDirectory() .. "/MoneyD/" .. nick)) then
  139. file = io.open(shell.getWorkingDirectory() .. "/MoneyD/" .. nick, "r")
  140. money = file:read(9999999)
  141. else
  142. file = io.open(shell.getWorkingDirectory() .. "/MoneyD/" .. nick, "w")
  143. money = 0
  144. file:write("0")
  145. file:close()
  146. end
  147. return money
  148. end
  149.  
  150. function Check_money(nick, PRICE)
  151. if (tonumber(Money(nick))>=PRICE) then
  152. return true
  153. else
  154. return false
  155. end
  156. end
  157.  
  158. function money_all()
  159. if (fs.exists(shell.getWorkingDirectory() .. "/moneyChest")) then
  160. file = io.open(shell.getWorkingDirectory() .. "/moneyChest", "r")
  161. local money = file:read(9999999)
  162. file:close()
  163. summa_money = money
  164. return money
  165. else
  166. file = io.open(shell.getWorkingDirectory() .. "/moneyChest", "w")
  167. file:write("0")
  168. file:close()
  169. summa_money = 0
  170. return "0"
  171. end
  172. end
  173.  
  174. function Login(w,h,nick)
  175. if w>=7 and w<=24 and h>=37 and h<=39 then
  176. if login == false then
  177. computer.addUser(nick)
  178. login = true
  179. Sky.ClearR(WIGHT,HEIGHT)
  180. g.setForeground(COLOR2)
  181. Sky.MidL(WIGHT,28,"Добро пожаловать")
  182. Sky.MidL(WIGHT,31,"Ваш баланс:")
  183. g.setForeground(COLOR1)
  184. Sky.MidL(WIGHT,29,nick)
  185. Sky.MidL(WIGHT,32, "[ " .. Money(nick) .. " ]")
  186. Sky.Button(7,37,18,3,COLOR1,COLOR2," Выход ")
  187. Game()
  188. computer.beep(TONE, 0.05)
  189. else
  190. Exit()
  191. end
  192. end
  193. end
  194.  
  195. function autoExit()
  196. timer = timer - 1
  197. g.setForeground(COLOR2)
  198. Sky.MidL(WIGHT,35, "Авто выход через: ")
  199. g.setForeground(COLOR1)
  200. g.set(24, 35, timer .. " ")
  201. if (smile) then
  202. Sky.MidL(WIGHT,26, "__(^o^)__")
  203. smile = false
  204. else
  205. Sky.MidL(WIGHT,26, " \\(^o^)/ ")
  206. smile = true
  207. end
  208. end
  209.  
  210. function Rules()
  211. g.setForeground(COLOR2)
  212. Sky.MidL(WIGHT,5,"==========================")
  213. Sky.MidL(WIGHT,7,"==========================")
  214. Sky.MidL(WIGHT,10,"==========================")
  215. Sky.MidL(WIGHT,14,"==========================")
  216. Sky.MidL(WIGHT,18,"==========================")
  217. Sky.MidL(WIGHT,21,"==========================")
  218. Sky.MidL(WIGHT,24,"==========================")
  219. Sky.MidL(WIGHT,22, "Всего потрачено:")
  220. g.setForeground(COLOR1)
  221. Sky.MidL(WIGHT,3, "Общая инфа:")
  222. Sky.MidL(WIGHT,6, "Цена сундука: = " .. PRICE .. "$")
  223. Sky.MidL(WIGHT,8, "Все шансы указаны")
  224. Sky.MidL(WIGHT,9, "с точностью до сотых")
  225. Sky.MidL(WIGHT,11, "Так что не надо плакать")
  226. Sky.MidL(WIGHT,12, "если вам падает булыга,")
  227. Sky.MidL(WIGHT,13, "тут уж как повезёт")
  228. Sky.MidL(WIGHT,15, "Вы играете на свой")
  229. Sky.MidL(WIGHT,16, "страх и риск")
  230. Sky.MidL(WIGHT,17, "Эмы не возвращаются")
  231. Sky.MidL(WIGHT,19, "Не забывайте чекать,")
  232. Sky.MidL(WIGHT,20, "есть ли слот в инвентаре")
  233. Sky.MidL(WIGHT,23, money_all() .. " эм.")
  234. Sky.Button(7,37,18,3,COLOR1,COLOR2,"Залогиниться")
  235. end
  236.  
  237. function Game()
  238. g.setForeground(COLOR1)
  239. Sky.MidR(WIGHT,3, "Список предметов в сундуке:")
  240. Sky.Button(mid - 15,37,30,3,COLOR1,COLOR2, "Открыть сундук -" .. PRICE .. "$")
  241. for i = 1, #ITEMS do
  242. g.setForeground(ITEMS[i][4])
  243. Sky.MidR(WIGHT,i+5, "&3" .. ITEMS[i][1] .. "x&r -- " .. ITEMS[i][2] .. " -- &3" .. Sky.Math_round(ITEMS[i][3] / summa * 100, 2) .. "%")
  244. end
  245. end
  246.  
  247. function midle(y, text) --Fast Render for Table \/
  248. len=unicode.len(text)
  249. x=mid-(len/2)
  250. g.set(x, y, text)
  251. end
  252.  
  253. function Table(rand)
  254. local win
  255. for j = 1, #ITEMS do
  256. midle(j+5, " ")
  257. if j == Sky.Math_round(#ITEMS / 2, 0) then
  258. win = rand
  259. g.setForeground(COLOR1)
  260. midle(j+5, ">>>>> " .. items_all[rand][2] .. " <<<<<")
  261. end
  262. g.setForeground(items_all[rand][3])
  263. midle(j+5, items_all[rand][2])
  264. if rand == #items_all then
  265. rand = 1
  266. else
  267. rand = rand + 1
  268. end
  269. end
  270. return win
  271. end
  272.  
  273. function Start(w,h,nick)
  274. if w>=mid-15 and w<=mid+14 and h>=37 and h<=39 then
  275. if(Check_money(nick, PRICE)) then
  276. if isFull() then
  277. computer.beep(TONE, 0.05)
  278. MoneyRemove(nick,PRICE)
  279. file = io.open(shell.getWorkingDirectory() .. "/moneyChest", "w")
  280. summa_money = summa_money + PRICE
  281. file:write(summa_money)
  282. file:close()
  283. g.setForeground(COLOR1)
  284. Sky.MidL(WIGHT,23, summa_money .. " эм.")
  285. Sky.MidL(WIGHT,35," Идёт игра... ")
  286. Sky.MidL(WIGHT,32, " [ " .. Money(nick) .. " ] ")
  287. Sky.MidR(WIGHT,35, " Открываем сундук... ")
  288. local rand, win = math.random(1, #items_all)
  289. for i = 1, 90 do
  290. win = Table(rand)
  291. if i < 75 then
  292. os.sleep(0.01)
  293. elseif i < 85 then
  294. computer.beep(TONE, 0.05)
  295. elseif i < 90 then
  296. computer.beep(TONE, 0.2)
  297. else
  298. computer.beep(TONE, 1)
  299. end
  300. if rand == #items_all then
  301. rand = 1
  302. else
  303. rand = rand + 1
  304. end
  305. end
  306. giveItem(items_all[win][4],items_all[win][1])
  307. if items_all[win][2] == "Релокатор" or items_all[win][2] == "Гравитационный жилет" or items_all[win][2] == "Ваджра" or items_all[win][2] == "Солнечная панель 4-ого уровня" then
  308. component.chat_box.say(CHAT_NAME .. "§5" .. nick .. " §aполучает предмет: §6" .. items_all[win][2] .. "§a, из сундука !")
  309. os.sleep(1)
  310. elseif items_all[win][2] == "Солнечная панель 5-ого уровня" then
  311. component.chat_box.say(CHAT_NAME .. "§5" .. nick .. " §aполучает предмет: §4" .. items_all[win][2] .. "§a, из сундука !")
  312. os.sleep(1)
  313. end
  314. g.setForeground(items_all[win][3])
  315. Sky.MidR(WIGHT,35, " ")
  316. Sky.MidR(WIGHT,35, items_all[win][2])
  317. else
  318. Sky.MidR(WIGHT,35, " Недостаточно вещей ")
  319. end
  320. else
  321. Sky.MidR(WIGHT,35, " Недостаточно средств ")
  322. end
  323. end
  324. end
  325.  
  326. function create_items()
  327. for i = 1, #ITEMS do
  328. for j = 1, ITEMS[i][3] do
  329. summa = summa + 1
  330. items_all[summa] = {ITEMS[i][1], ITEMS[i][2], ITEMS[i][4], ITEMS[i][5]}
  331. end
  332. end
  333. Sky.Shake(items_all)
  334. end
  335.  
  336. function Exit()
  337. login = false
  338. Sky.ClearL(HEIGHT)
  339. Sky.ClearR(WIGHT,HEIGHT)
  340. Rules()
  341. Sky.DrawImage(mid - 21,7, shell.getWorkingDirectory() .. "/LogoChest.lua")
  342. Sky.DrawImage(mid - 28,20, shell.getWorkingDirectory() .. "/ChestImage.lua")
  343. local users={computer.users()}
  344. for i=1, #users do
  345. computer.removeUser(users[i])
  346. end
  347. end
  348.  
  349. create_items()
  350. Exit()
  351.  
  352. while true do
  353. local e,_,w,h,_,nick = event.pull(1, "touch")
  354. flag = true
  355. if e == "touch" then
  356. flag = false
  357. takeMoney(nick)
  358. Login(w,h,nick)
  359. if (login) then
  360. Start(w,h,nick)
  361. end
  362. timer = AUTOEXIT
  363. end
  364. if (login) then
  365. autoExit()
  366. if timer == 0 then
  367. Exit()
  368. end
  369. else
  370. local users={computer.users()}
  371. for i=1, #users do
  372. computer.removeUser(users[i])
  373. end
  374. end
  375. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement