Перейти к содержимому
yura0138

Программа "Очень много электричества"

Рекомендуемые сообщения

проект нормальный, из топа, просто под опенкомпы не заточен,

2 часа назад, Asior сказал:

/rg flag название_привата robots ник_игрока

а флага только 3

 на использование механизмов, спавн мобов, и пвп:) так что не проканает, а насчёт не видит сундуки.... так я в сингле делаю, а на серве общедоступный буду использовать....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ОС то какой версии? Если ниже 1.7.2 то тогда да, там вроде масскана не добавляли еще. Странно что они его еще используют, там же баг на баге и багом погонят. Не помню уже, в этой ли версии можно в папочку сервера зайти или как ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Asior версия мода 1.6.2.12, MC 1.7.10

 

 

Изменено пользователем Alex

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, Alex сказал:

Ты где это патчишь? В самом жарнике? Если да, то это работать не будет.

Да, я правил прямо в jar, и там у меня получался рабочим либо рецепт крафта, либо рецепт ремонта.

3 часа назад, Alex сказал:

Скопируй из жарника из папки \assets\ic2\config\   все файлы в папку с игрой в minecraft/config/ic2 и уже там их все настраивай.

Работает. Кстати, не обязательно копировать все файлы, достаточно файлов shaped_recipes.ini и shapeless_recipes.ini.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
28 минут назад, eu_tomat сказал:

Работает. Кстати, не обязательно копировать все файлы, достаточно файлов shaped_recipes.ini и shapeless_recipes.ini.

ну да, тебе в твоем случае нужны только эти 2 файла. Но если тебе понадобится фиксануть рецепт мазератора или компрессора или еще чего-то, или добавить свой кастомный рецепт для экструдера, тебе опять придется лазать в жарник. Забери ВСЕ файлы из жарника и уже полностью контролируй ИК2 на свое усмотрение:) Там багулек хватает в рецептах, и они не ограничиваются только красным и синим конденсаторами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всех с праздником !

 

Программа @Asior pastebin.com/bji2zXCq не плохая, но не имеет интерфейса.

В графике я не силен, но накидал простенькое отображение состояния конденсаторов и их замену.

 

тут шаблон отрисовки по координатам

Скрытый текст

local comp = require('component')
local gpu = comp.gpu

gpu.setResolution(28,15)
gpu.setBackground(0x000000)
gpu.fill(1,1,28,15," ")
gpu.setForeground(0x669999)

 gpu.set(1,1,"┌──────────────────────────┐")
 gpu.set(1,2,"│  │  │  │  │  │  │  │  │  │")
 gpu.set(1,3,"│──────────────────────────│")
 gpu.set(1,4,"│  │  │  │  │  │  │  │  │  │")
 gpu.set(1,5,"│──────────────────────────│")
 gpu.set(1,6,"│  │  │  │  │  │  │  │  │  │")
 gpu.set(1,7,"│──────────────────────────│")
 gpu.set(1,8,"│  │  │  │  │  │  │  │  │  │")
 gpu.set(1,9,"│──────────────────────────│")
gpu.set(1,10,"│  │  │  │  │  │  │  │  │  │")
gpu.set(1,11,"│──────────────────────────│")
gpu.set(1,12,"│  │  │  │  │  │  │  │  │  │")
gpu.set(1,13,"└──────────────────────────┘")

gpu.setForeground(0xFF9900)

local xy = {
{"2","2"},{"5","2"},{"8","2"},{"11","2"},{"14","2"},{"17","2"},{"20","2"},{"23","2"},{"26","2"},
{"2","4"},{"5","4"},{"8","4"},{"11","4"},{"14","4"},{"17","4"},{"20","4"},{"23","4"},{"26","4"},
{"2","6"},{"5","6"},{"8","6"},{"11","6"},{"14","6"},{"17","6"},{"20","6"},{"23","6"},{"26","6"},
{"2","8"},{"5","8"},{"8","8"},{"11","8"},{"14","8"},{"17","8"},{"20","8"},{"23","8"},{"26","8"},
{"2","10"},{"5","10"},{"8","10"},{"11","10"},{"14","10"},{"17","10"},{"20","10"},{"23","10"},{"26","10"},
{"2","12"},{"5","12"},{"8","12"},{"11","12"},{"14","12"},{"17","12"},{"20","12"},{"23","12"},{"26","12"},
}

while true do
  local slot = math.random(1,54)
  local per = math.random(1,99)
  gpu.set(1,15,"slot "..slot.." = "..per.."  ")
  gpu.set(tonumber(xy[slot][1]),tonumber(xy[slot][2]),tostring(per))
  os.sleep(3)
end

 

GCZXSLD.gif

 

Есть ли иной способ вывода значений без использования таблицы координат ?

 

 

Изменено пользователем serafim

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 09.05.2019 в 13:48, serafim сказал:

тут шаблон отрисовки по координатам

Если будет 100%?

Изменено пользователем Alex
Сокращение цитирования

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

на экране 100% не будет отображаться, конденсаторы меняются при 97%

 

Изменено пользователем serafim

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Какая знакомая дыра. Я тоже в такой проги для реактора писал :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да дыра что надо :)

Лучше использовать дополнительно внешнюю защиту от перегрева на датчике температуры из IC2NuclearControl плюс элемент И

 

2019-05-09_16.05.13.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
54 минуты назад, serafim сказал:

Лучше использовать дополнительно внешнюю защиту от перегрева на датчике температуры из IC2NuclearControl плюс элемент И

сгорит весь редстоун нафиг. Там температура большая, все горит. Хотя если на сервере, то приват от пожара защитит

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

При температуре 8500 образуется лава разрушающая всё вокруг, до этой температуры не сгорит, а вообще всё надо тестить ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@serafim Отлично! с интерфейсом ещё лучше!

@Alex Может перенести тему к примеру, в раздел инфраструктура? людям такой способ выработки электричества пригодится:), (а узнав что кондёры у вас нормально работают могут и к вам перейти:))

Изменено пользователем yura0138

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Программа сырая, в ней море недоработок которые приведут к взрыву реактора :D 

Я бы так не спешил пускать прогу в массы.

В случае остановки программы например прервав её выполнение (ctrl+alt+c) реактор не остановится.

Надо бы прикрутить кнопку выхода из проги, с отключением редстоун сигнала.

Местами хромает логика, ряд значений выводятся условно, без проверок + присутствует лютый костыль в методе отрисовке графики.

 

Желающи пофиксить приветствуются

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

программа контроля реактора IC2 с конденсаторами:

Скрытый текст

--[[opencomputers контроль реактора IC2 на конденсаторах
    pastebin.com/kfRBNS0w              update 18.06.2019

для проекта computercraft.ru  
https://computercraft.ru/topic/2604-programma-ochen-mnogo-elektrichestva
авторы: Asior, serafim

требования:
монитор и видеокарта 2-го уровня,
адаптер, транспозер, контроллер красного камня.

пример сборки:
https://i.imgur.com/Zv24ihq.png

схема реактора:
https://i.imgur.com/khizg7Q.png

использование:
собрать установку, для плутония нагреть реактор до 8400 градусов,
желательно обеспечить автокрафт перезарядки конденсаторов
https://pastebin.com/WgcCKBFn
]]--

local offReac = 8400 --температура перегрева реактора до отключения
local perDamage = 97 --процент износа конденсатора при котором он меняется

local com = require("component")
local event = require("event")
local gpu = com.gpu
local slotReac = {}
local per,noFuel,toChest,toReac = 0,0,1,1
local vr,data1,sideReac,sideInv,sideRed
local w,h = gpu.getResolution()

if not com.isAvailable("reactor_chamber") then
  print("для работы нужен адаптер")
  os.exit()
end
local reactor = com.reactor_chamber

if not com.isAvailable("transposer") then
  print("для работы нужен транспозер")
  os.exit()
end
local tr = com.transposer

if not com.isAvailable("redstone") then
  print("для работы нужен контроллер красного камня")
  os.exit()
end
local red = com.redstone

if reactor.producesEnergy() then
  print("\n".."остановите реактор !")
  for i=0,5 do
    if red.getOutput(i) > 0 then
      red.setOutput(i, 0)
    end
  end
  os.exit()
end

if reactor.getHeat() > offReac then
  print("\n".."перегрев реактора !")
  os.exit()
end

print("поиск реактора и сундука")
for i=0,5 do
  vr = tr.getInventoryName(i)
  if vr then
    if vr == "blockReactorChamber" then
      print("реактор в стороне: "..i)
      sideReac = i
    end
    local chest = string.find(vr,"hest")
    if chest then
      print("сундук в стороне: "..i)
      sideInv = i
    end
  end
end
if not sideReac then
  print("\n".."камера реактора не найдена")
  os.exit()
end
if not sideInv then
  print("\n".."сундук не найден")
  os.exit()
end
local slotsReac = tr.getInventorySize(sideReac)
local slotsInv = tr.getInventorySize(sideInv)

print("сохранение расположения конденсаторов")
local data = tr.getAllStacks(sideReac).getAll()
for i=0, slotsReac+1 do
  if data[i] and (data[i].name == 'IC2:reactorCondensatorLap' or data[i].name == "IC2:reactorCondensator") then
    per = math.ceil(100*data[i].damage/10000)
    print("слот: "..(i+1).."  износ: "..per.." %")
    if per >= perDamage then
      print("\n".."замените конденсатор в слоте: "..(i+1))
      os.exit()
    end
    slotReac[#slotReac+1] = i+1
  end
end

print("пробный запуск")
for i=0,5 do
  red.setOutput(i, 15)
  if reactor.producesEnergy() then
    sideRed = i
    red.setOutput(sideRed, 0)
    print("редстоун в стороне: "..sideRed)
    break
  else
    red.setOutput(i, 0)
  end
  if i == 5 then
    print("\n".."реактор не запускается")
    os.exit()
  end
end

print("настройка завершена".."\n".."старт...")
os.sleep(2)

local function gui() 
  gpu.setResolution(28,15)
  gpu.setBackground(0x000000)
  gpu.fill(1,1,28,15," ")
  gpu.setForeground(0x669999)
  gpu.set(1,1,"┌──────────────────────────┐")
  gpu.set(1,2,"│  │  │  │  │  │  │  │  │  │")
  gpu.set(1,3,"│──────────────────────────│")
  gpu.set(1,4,"│  │  │  │  │  │  │  │  │  │")
  gpu.set(1,5,"│──────────────────────────│")
  gpu.set(1,6,"│  │  │  │  │  │  │  │  │  │")
  gpu.set(1,7,"│──────────────────────────│")
  gpu.set(1,8,"│  │  │  │  │  │  │  │  │  │")
  gpu.set(1,9,"│──────────────────────────│")
 gpu.set(1,10,"│  │  │  │  │  │  │  │  │  │")
 gpu.set(1,11,"│──────────────────────────│")
 gpu.set(1,12,"│  │  │  │  │  │  │  │  │  │")
 gpu.set(1,13,"└──────────────────────────┘")
end

local xy = {
{"2","2"},{"5","2"},{"8","2"},{"11","2"},{"14","2"},{"17","2"},{"20","2"},{"23","2"},{"26","2"},
{"2","4"},{"5","4"},{"8","4"},{"11","4"},{"14","4"},{"17","4"},{"20","4"},{"23","4"},{"26","4"},
{"2","6"},{"5","6"},{"8","6"},{"11","6"},{"14","6"},{"17","6"},{"20","6"},{"23","6"},{"26","6"},
{"2","8"},{"5","8"},{"8","8"},{"11","8"},{"14","8"},{"17","8"},{"20","8"},{"23","8"},{"26","8"},
{"2","10"},{"5","10"},{"8","10"},{"11","10"},{"14","10"},{"17","10"},{"20","10"},{"23","10"},{"26","10"},
{"2","12"},{"5","12"},{"8","12"},{"11","12"},{"14","12"},{"17","12"},{"20","12"},{"23","12"},{"26","12"},
}

local function circuitCheck() 
  local data = tr.getAllStacks(sideReac).getAll()
  local sh = 0
  for i=1,#slotReac do
    if data[slotReac[i]-1].damage then
      sh = sh + 1
    end
  end
  if sh == #slotReac then
    return true
  else
    return false
  end
end

local function stop() 
  red.setOutput(sideRed, 0)
  gpu.setResolution(w, h)
  gpu.setBackground(0x000000)
  gpu.setForeground(0xFFFFFF)
  gpu.fill(1, 1, w, h, " ")
  print("программа завершена")
  os.sleep(1)
  if reactor.producesEnergy() then
    print("ВНИМАНИЕ реактор по прежнему активен !!!")
  else
    print("реактор остановлен")
  end
  os.exit()
end

gui()
gpu.setForeground(0xFF9900)
gpu.set(1,14,"  для завершения нажмите E  ")
while true do
  local data = tr.getAllStacks(sideReac).getAll()
  for i=1,#slotReac do
    if data[slotReac[i]-1].damage then
      per = math.ceil(100*data[slotReac[i]-1].damage/10000)
      gpu.setForeground(0xFF9900)
      gpu.set(tonumber(xy[slotReac[i]][1]),tonumber(xy[slotReac[i]][2]),tostring(per))
    else
      per = 0
    end
    if per == 100 then
      red.setOutput(sideRed, 0)
      gpu.setForeground(0xFF0000)
      gpu.set(1,14," снизте % замены конденсат. ")
      gpu.set(1,15,"     реактор остановлен     ")
      event.pull("key_down")
      stop()
    end
    if per >= perDamage or per == 0 then
      red.setOutput(sideRed, 0)
      gpu.setForeground(0xFF9900)
      gpu.set(1,15,"    замена конденсаторов    ")
      os.sleep(0.5)
      toChest = tr.transferItem(sideReac, sideInv, 1, slotReac[i])
      gpu.setForeground(0xFF0000)
      gpu.set(tonumber(xy[slotReac[i]][1]),tonumber(xy[slotReac[i]][2]),"██")
      data1 = tr.getAllStacks(sideInv).getAll()
      for i1=0,slotsInv do
        if data1[i1] and (data1[i1].name == "IC2:reactorCondensatorLap" or data1[i1].name == "IC2:reactorCondensator") and data1[i1].damage < 100 then
          toReac = tr.transferItem(sideInv, sideReac, 1, i1+1, slotReac[i])
          gpu.setForeground(0x00FF00)
          gpu.set(tonumber(xy[slotReac[i]][1]),tonumber(xy[slotReac[i]][2]),"██")
          break
        end
      end
    end
  end
  gpu.setForeground(0xFF0000)
  if reactor.getHeat() > offReac then
    red.setOutput(sideRed, 0)
    gpu.set(1,15,"     перегрев реактора !    ")
  elseif not circuitCheck() then
    gpu.set(1,15," нет целых конденсаторов !  ")
  elseif toChest == 0 and toReac == 0 then
    gpu.set(1,15,"    в сундуке нет места !   ")
  elseif noFuel >= 5 then
    gpu.set(1,15,"       нет топлива !        ")
  else
    red.setOutput(sideRed, 15)
    if not reactor.producesEnergy() then
      gpu.set(1,15,"  реактор не запускается !  ")
    else
      gpu.setForeground(0x00FF00)
      gpu.set(1,15,"      реактор работает      ")
    end
  end
  local e = {event.pull(0.7,"key_down")}
  if e[4] == 18 or e[4] == 20 then
    stop()
  end
  if reactor.producesEnergy() and reactor.getReactorEUOutput() == 0 then
    noFuel = noFuel + 1
  else
    noFuel = 0
  end
end

 

pastebin get kfRBNS0w ic.lua

наиболее эффективная схема предложена @whiskas на странице 2

Скрытый текст

khizg7Q.png

пример сборки предложен @Asior на странице 1

Скрытый текст

IpCvvSw.png

мой пример сборки с дополнительной защитой от перегрева

Скрытый текст

nfp42Pp.png

d3zProE.png

автокрафт конденсаторов IC2 на роботе

Скрытый текст

--[[opencomputers автокрафт конденсаторов IC2 by serafim
    pastebin.com/WgcCKBFn              update 03.06.2019

требования:
робот второго уровня, улучшение верстак,
инвентарь, контроллер инвентаря.

использование:
поставить робота к сундку (можно передом, сверху, снизу сундкука),
положить в сундук блоки лазурита (для лазуритовх конденсаторов)
или блоки редстоуна (для редстоун конденсаторов).
указать в программе тип конденсаторов.
--]]

local condensator = "lapis" -- тип конденсатора "lapis" или "redstone"

local com = require("component")
local term = require("term")

if not com.isAvailable("robot") then
  print("только роботы могут использовать эту программу")
  os.exit()
end
local r = require("robot")

if not com.isAvailable("crafting") then
  print("нет улучшения верстак")
  os.exit()
end
local craft = com.crafting

if not com.isAvailable("inventory_controller") then
  print("нет контроллера инвентаря")
  os.exit()
end
local i_c = com.inventory_controller

local conden,block
if condensator == "lapis" then
  print("тип конденсатора: лазурит")
  conden = "IC2:reactorCondensatorLap"
  block = "minecraft:lapis_block"
else
  print("тип конденсатора: редстоун")
  conden = "IC2:reactorCondensator"
  block = "minecraft:redstone_block"
end
os.sleep(1)

local chestside,side = {3,1,0} --"front","up","down"
for k,n in pairs(chestside) do
  local chest = i_c.getInventorySize(n)
  if chest then
    side = n
    break
  end
end
if side then
  print("сундук в стороне: "..side)
  os.sleep(1)
else
  print("сундук не найден")
  os.exit()
end

if side == 3 then
  drop = function() if r.drop() then return true end end
elseif side == 1 then
  drop = function() if r.dropUp() then return true end end
elseif side == 0 then
  drop = function() if r.dropDown() then return true end end
end

local sizeInv = i_c.getInventorySize(side)
local dropCount = 0

local function unload(all)
  if all then
    print("выгрузка всего инвентаря")
    for i = 1,r.inventorySize() do
      if r.count(i) > 0 then
        r.select(i)
        drop()
      end
    end
    return
  end
  if drop() then
    print("выгрузка")
    r.setLightColor(0x008000)
    dropCount = dropCount + 1
  else
    print("в сундуке нет места :(")
  end
end

while true do
  r.setLightColor(0xFFFFFF)
  term.clear()
  if r.count(1) == 0 then
    r.select(1)
    for slot = 1,sizeInv do
      local item = i_c.getStackInSlot(side, slot)
      if item and item.name == block then
        print("блок в слоте: "..slot)
        i_c.suckFromSlot(side, slot)
        break
      end
      if slot == sizeInv then
        print("в сундуке нет блоков для крафта")
        r.setLightColor(0xFF0000)
      end
    end
  else
    local slotConden = {}
    for i = 1,sizeInv do
      local item = i_c.getStackInSlot(side, i)
      if item and item.name == conden and item.damage > 9000 then -- MaxDamage 10000
        print("конденсатор в слоте: "..i.."  износ: "..math.ceil(100*item.damage/10000).." %")
        slotConden[i] = i
      end
    end  
    if r.count(4) > 0 then
      r.select(4)
      unload()
    end
    for i,n in pairs(slotConden) do
      print("крафт слота: "..i)
      if r.count(2) == 0 then
        r.select(2)
        i_c.suckFromSlot(side, i)
      end
      r.select(4)
      if craft.craft() then
        r.setLightColor(0xFF00FF)
        unload()
      else
        print("ошибка крафта :(")
        r.setLightColor(0xFF0000)
        unload(true)
        break
      end
    end
  end
  print("всего скрафтил конденсаторов: "..dropCount.."\n".."жду 5 секунд...")
  os.sleep(5)
end

 

pastebin get WgcCKBFn craft.lua
Скрытый текст

x545jGA.gif

 

Изменено пользователем serafim

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А я завершил создание автоподстоечной таблицы. Как будет время попробую весь вывод нормально в кучу собрать и систематизировать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
20 часов назад, serafim сказал:

Для особо лютых схем, где конденсатор выгорает быстрее чем меняется...

а где вы столько этого ляписа берете? он же вроде не так, чтобы уж спавнится тоннами. Или вы его как-то синтезируете из чего-то? Это же довольно таки вроде не дешманский рес. Или нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, Alex сказал:

а где вы столько этого ляписа берете? он же вроде не так, чтобы уж спавнится тоннами. Или вы его как-то синтезируете из чего-то? Это же довольно таки вроде не дешманский рес. Или нет?

Дюпают

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Уран с материи или с пчел делают если ти про ет)

(не на евиле)

Изменено пользователем whiskas

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...