Stawlie0

Untitled

Oct 14th, 2023
473
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.78 KB | None | 0 0
  1. require("package").loaded["doublebuffer"] = nil
  2. require("package").loaded["control"] = nil
  3. require("package").loaded["casino"] = nil
  4. require("package").loaded["sgui"] = nil
  5.  
  6. local controlLib = require("control")
  7. local charSpace = ' '
  8.  
  9. local component = require("component")
  10. local computer = require("computer")
  11. local event = require("event")
  12. local unicode = require("unicode")
  13. local thread = require("thread")
  14.  
  15. local Casino = require("casino")
  16. local gui = require("sgui")
  17.  
  18. local gpu = component.gpu
  19. local radar = component.radar
  20. local chatbox = component.chat_box
  21.  
  22. chatbox.setName("§6BAZAR CASINO§7§o")
  23. chatbox.say("§aМодули успешно загружены")
  24.  
  25. local width, height = gpu.getResolution()
  26.  
  27. gpu.setResolution(112,50)
  28.  
  29. local win = {}
  30. --Резервируем места
  31. local function reservWin()
  32.     local x = 10 -- начальная Координата x
  33.     local y = 6  -- начальная координата y
  34.     for i = 1, 63 do
  35.         local id = controlLib.createLabel{
  36.             x = x;
  37.             y = y;
  38.             text = ""
  39.         }
  40.         table.insert(win, id)
  41.         x = x + 36
  42.         if x > 108 then
  43.             x = 10
  44.             y = y+2
  45.         end
  46.     end
  47.     local id = controlLib.createLabel{
  48.         x = 46;
  49.         y = y;
  50.         text = ""
  51.     }
  52.     table.insert(win, id)
  53. end
  54.  
  55. reservWin()
  56.  
  57. local function ClearWin()
  58.     for i = 1, 64 do
  59.         controlLib.updateControl(win[i], {
  60.             text = ""
  61.         })
  62.     end
  63. end
  64.  
  65. local function saveToFile(filename, data)
  66.     local file = io.open(filename, "w")
  67.     if file then
  68.         file:write(serialization.serialize(data))
  69.         file:close()
  70.     else
  71.         error("Не удалось открыть файл для записи!")
  72.     end
  73. end
  74.  
  75. local function loadFromFile(filename)
  76.     local file = io.open(filename, "r")
  77.     if file then
  78.         local data = file:read("*a")
  79.         file:close()
  80.         return serialization.unserialize(data)
  81.     else
  82.         error("Не удалось открыть файл для чтения!")
  83.     end
  84. end
  85.  
  86. local myCasino = Casino:new()
  87.  
  88. myCasino:addItem("&aЖемчуг эндера", "minecraft:ender_pearl", 4, 0.8)
  89. myCasino:addItem("&aСингулярность", "Singularity", 1, 0.8)
  90. myCasino:addItem("&aАпатит", "forestry:apatite", 64, 0.8)
  91. myCasino:addItem("&aКорпус ячейки", "ME Storage Housing", 1, 0.8)
  92. myCasino:addItem("&aУл. Электросхема", "Advanced Circuit", 1, 0.8)
  93. myCasino:addItem("&aЭлектросхема", "Electronic Circuit", 1, 0.8)
  94. myCasino:addItem("&aОбсидиан", "minecraft:obsidian", 32, 0.8)
  95. myCasino:addItem("&aИзумруд", "minecraft:emerald", 16, 0.8)
  96. myCasino:addItem("&aАккумулятор", "contenttweaker:modelbatre", 1, 0.8)
  97.  
  98. myCasino:addItem("&aВычислительный процессор", "Calculation Processor", 2, 0.8)
  99. myCasino:addItem("&aЛогический процессор", "Logic Processor", 2, 0.8)
  100. myCasino:addItem("&aСпекулятивный процессор", "Speculative Processor", 2, 0.8)
  101. myCasino:addItem("&aМассивный процессор", "Massively Parallel Processor", 2, 0.8)
  102. myCasino:addItem("&aИридиевый процессор", "Iridium Processor", 2, 0.8)
  103. myCasino:addItem("&aИнженерный процессор", "Engineering Processor", 2, 0.8)
  104. myCasino:addItem("&aУран 238", "Uranium 238", 1, 0.8)
  105. myCasino:addItem("&aЧасть саннариума", "Sunnarium Part", 1, 0.8)
  106. myCasino:addItem("&aПасека", "forestry:apiary", 1, 0.8)
  107.  
  108. myCasino:addItem("&eТрансформатор", "Transformer Upgrade", 1, 0.4)
  109. myCasino:addItem("&eУскоритель", "Overclocker Upgrade", 1, 0.4)
  110. myCasino:addItem("&eСветокамень", "minecraft:glowstone", 8, 0.4)
  111. myCasino:addItem("&eМатерия", "UU-Matter", 8, 0.4)
  112. myCasino:addItem("&eИридий", "Iridium Ore", 1, 0.4)
  113. myCasino:addItem("&eМаточное молочко", "forestry:royal_jelly", 8, 0.4)
  114. myCasino:addItem("&eУрановая руда", "Uranium Ore", 16, 0.4)
  115. myCasino:addItem("&eРезонирующий набор", "thermalfoundation:upgrade", 2, 0.4)
  116. myCasino:addItem("&eПанель 2-го уровня", "Low Voltage Solar Array", 1, 0.4)
  117.  
  118. myCasino:addItem("&bПромышленная пасека", "gendustry:industrial_apiary", 1, 0.3)
  119. myCasino:addItem("&bБлок Угля", "minecraft:coal_block", 64, 0.3)
  120. myCasino:addItem("&bКиноварь", "Cinnabar", 64, 0.3)
  121. myCasino:addItem("&bАметист", "contenttweaker:amethyst", 4, 0.3)
  122. myCasino:addItem("&bЯйцо дракона", "minecraft:dragon_egg", 1, 0.3)
  123. myCasino:addItem("&bБлок Платины", "thermalfoundation:storage", 32, 0.3)
  124. myCasino:addItem("&bБлок Изумрудов", "minecraft:emerald_block", 64, 0.3)
  125. myCasino:addItem("&bПанель 3-го уровня", "Medium Voltage Solar Array", 1, 0.3)
  126.  
  127. myCasino:addItem("&dЭнергетическая капля", "Energy Drop", 16, 0.2)
  128. myCasino:addItem("&dСовершенная материя", "ic2stuff:pf_matter", 2, 0.2)
  129. myCasino:addItem("&dПлутоний", "Plutonium", 8, 0.2)
  130. myCasino:addItem("&dНано нагрудник", "Advanced NanoChestplate", 1, 0.2)
  131. myCasino:addItem("&dПыль Синерии", "tllod:material", 8, 0.2)
  132. myCasino:addItem("&dУлучшение Производство", "Production Upgrade", 4, 0.2)
  133. myCasino:addItem("&dПанель 5-го уровня", "Advanced Solar Panel", 1, 0.2)
  134.  
  135. myCasino:addItem("&9Панель 6-го уровня", "Ultimate Hybrid Solar Panel", 1, 0.15)
  136. myCasino:addItem("&9Панель 7-го уровня", "Hybrid Solar Panel", 1, 0.15)
  137. myCasino:addItem("&9Топор виверны", "draconicevolution:wyvern_axe", 1, 0.15)
  138. myCasino:addItem("&9Кирка Виверны", "draconicevolution:wyvern_pick", 1, 0.15)
  139. myCasino:addItem("&9Виверновый нагрудник", "draconicevolution:wyvern_chest", 1, 0.15)
  140. myCasino:addItem("&9Виверновые поножи", "draconicevolution:wyvern_legs", 1, 0.15)
  141. myCasino:addItem("&9Виверновые болитинки", "draconicevolution:wyvern_boots", 1, 0.15)
  142. myCasino:addItem("&9Виверновый шлем", "draconicevolution:wyvern_helm", 1, 0.15)
  143. myCasino:addItem("&9Сердце дракона", "draconicevolution:dragon_heart", 1, 0.15)
  144.  
  145. myCasino:addItem("&6Поножи дракона", "draconicevolution:draconic_legs", 1, 0.05)
  146. myCasino:addItem("&6Шлем дракона", "draconicevolution:draconic_helm", 1, 0.05)
  147. myCasino:addItem("&6Панель 8-го уровня", "Quantum Solar Panel", 1, 0.05)
  148. myCasino:addItem("&6Ботинки дракона", "draconicevolution:draconic_boots", 1, 0.05)
  149. myCasino:addItem("&6Контейнер для кибер-пчел III", "contenttweaker:bees_container_t3", 1, 0.05)
  150. myCasino:addItem("&6Пробужденное ядро", "draconicevolution:awakened_core", 1, 0.05)
  151. myCasino:addItem("&6Звезда ада", "minecraft:nether_star", 32, 0.05)
  152. myCasino:addItem("&6Кирка дракона", "draconicevolution:draconic_pick", 1, 0.05)
  153.  
  154. myCasino:addItem("&cКвантовый генератор", "Quantum Generator", 1, 0.01)
  155. myCasino:addItem("&cНагрудник дракона", "draconicevolution:draconic_chest", 1, 0.01)
  156. myCasino:addItem("&cКвантовая кирка", "apex:quantum_pickaxe", 1, 0.01)
  157. myCasino:addItem("&cКибернетическая пасека", "modularmachinery:cybernetic_apiary_controller", 1, 0.01)
  158. myCasino:search_transposers()
  159. --myCasino:get_list()
  160.  
  161. controlLib.drawAll()
  162. --myCasino:displayItems()
  163.  
  164. local function mainCasino(money)
  165.     local rewardsList = {}
  166.     local itemCounts = {}
  167.     myCasino:sendMoney(money)
  168.     chatbox.say("§6Баланс пополнен на §a$" .. money)
  169.     for i = 1, 64 do
  170.         controlLib.updateControl(win[i], {
  171.             text = string.rep(" ", 36),
  172.         })
  173.     end
  174.     controlLib.drawAll()
  175.  
  176.     for i = 1, money do
  177.         local reward = myCasino:weightedRoll()
  178.         local displayName = string.gsub(reward.name, "&", "§", 1)
  179.  
  180.         component.proxy(reward.address).transferItem(0, 1, reward.count, reward.slot, i)
  181.  
  182.         local secondChar = string.sub(reward.name, 2, 2)
  183.         local modifiedString = string.sub(reward.name, 3)
  184.  
  185.         if reward and reward.name and reward.count then
  186.             -- Суммируем количество одинаковых предметов и сохраняем шанс
  187.             if itemCounts[displayName] then
  188.                 itemCounts[displayName].count = itemCounts[displayName].count + reward.count
  189.             else
  190.                 itemCounts[displayName] = {count = reward.count, chance = reward.chance}
  191.             end
  192.         end
  193.         controlLib.updateControl(win[i], {
  194.             text = modifiedString,
  195.             foreColor = gui.colors[secondChar],
  196.         })
  197.         controlLib.drawAll()
  198.         os.sleep(0.5)
  199.     end
  200.  
  201.     -- Создаем список для отсортированных результатов
  202.     for name, data in pairs(itemCounts) do
  203.         table.insert(rewardsList, {name = name, count = data.count, chance = data.chance})
  204.     end
  205.  
  206.     table.sort(rewardsList, function(a, b) return a.chance < b.chance end)
  207.  
  208.     local results = {}
  209.     for _, item in ipairs(rewardsList) do
  210.         table.insert(results, item.name .. ": " .. item.count .. "x")
  211.     end
  212.     local resultString = "\n" .. table.concat(results, "\n")
  213.     chatbox.say(resultString)        
  214. end
  215.  
  216. local totalCash = 0
  217.  
  218. local permissions = {}
  219. permissions["Stawlie_"] = true
  220. permissions["NikkyFreaky"] = true
  221.  
  222. local function chatMessageHandler()
  223.     chatbox.say("Модуль чата запущен")
  224.     while true do
  225.         local _, address, nick, msg = event.pull(0.1, "chat_message")
  226.         local words = {}
  227.         local countWords = 0
  228.  
  229.         if msg then
  230.             msg = string.lower(msg)
  231.             for word in msg:gmatch("%S+") do
  232.                 table.insert(words, word)
  233.                 countWords = countWords + 1
  234.             end
  235.             if permissions[nick] then
  236.                 if words[1] == "@try" then
  237.                     chatbox.say("§fПопыток: §a§l" .. totalCash)
  238.                 elseif words[1] == "@off" then
  239.                     chatbox.say("§e§lПерезагружаюсь")
  240.                     computer.shutdown(true)
  241.                 elseif words[1] == "@add" then
  242.                     if words[2] then
  243.                         chatbox.say("§с&lПополняю")
  244.                         mainCasino(tonumber(words[2]))
  245.                     end
  246.                 elseif words[1] == "@owner" then
  247.                     if words[2] then
  248.                         permissions[words[2]] = true
  249.                     end
  250.                 end
  251.             end
  252.         end
  253.     end
  254. end
  255.  
  256. thread.create(chatMessageHandler)
  257.  
  258. local colors = { {0xFF0000, 0x0000FF}, {0x0000FF, 0x00FF00}, {0x00FF00, 0xFF0000} }
  259. local indexColorGradient = 1
  260.  
  261. while true do
  262.     gui.drawMain("[Casino BAZAR]", 0.3, colors[indexColorGradient][1], colors[indexColorGradient][2])
  263.    
  264.     indexColorGradient = indexColorGradient % #colors + 1
  265.    
  266.     local money = myCasino:SearchMoney()
  267.  
  268.     if money then
  269.         if filesystem.exists("/try.data") then
  270.             totalCash = loadFromFile("/try.data")
  271.         else
  272.             totalCash = 0
  273.         end
  274.         mainCasino(money)
  275.         totalCash = totalCash + money
  276.         saveToFile("/try.data", totalCash)
  277.     end
  278.     computer.pullSignal(2)
  279. end
  280.  
  281. --Проблемы
  282. --Если существует 2 одинаковых предмета, например камень с шансом 0.3 и камень с шансом 0.2, алгоритм записывает адрес только первого камня, который попадется в списке
Advertisement
Add Comment
Please, Sign In to add comment