Open Computers

Нужно ли выкладывать 3D модели?

  • На твое усмотрение

    Голосов: 0 0,0%
  • Нет, я БОГ в OC и 3D печати

    Голосов: 0 0,0%

  • Всего проголосовало
    5
Достаточно много игроков играет на сервере с модом Open Computers, но не каждый может\хочет или умеет программировать на языке Lua.

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

П.С. У кого есть интересные 3д модели для OC пишите)

Для создания программы необходимо ввести в консоли
Код:
edit название программы без пробелов
Для вставки кода в программу необходимо воспользоваться не стандартным Ctrl+V, а клавишей Insert.

Итак, первая программа.
Программа довольно таки простая, предназначена для контроля реактора.
Для работы этой программы нужен адаптер, поставленный впритык к любой из ядерных камер.
В коде программы вам нужно будет в определенных местах прописать разрешение вашего экрана и адрес вашего реактора(первые 3 символа). Что бы получить адрес реактора необходимо с анализатором в руках кликнуть Shift+ПКМ по адаптеру.
Код:
local com=require("component")
com.gpu.setResolution(РАЗРЕШЕНИЕ,РАЗРЕШЕНИЕ);
com.gpu.fill(1,1,РАЗРЕШЕНИЕ,РАЗРЕШЕНИЕ," ");
while true do
proxReactor=com.proxy(com.get("Адрес реактора"));
local p=proxReactor.producesEnergy();
local eu=proxReactor.getReactorEUOutput()
if eu > 0 then
com.gpu.set(1,1,"Выход EU:");
com.gpu.set(11,1,eu.." ");
end;
if p==true then
com.gpu.set(1,2,"Включен");
else
com.gpu.set(1,2,"Выключен");
end;
os.sleep(0,1)
end;

Следующая программа создана для просмотра количества энергии на энергохранителях(МФЭ,МФСУ).
Подключение к определенному устройству производится с помощью того же адреса.
Код:
local com = require("component")
com.gpu.setResolution(80,25);
com.gpu.fill(1,1,80,2," ");

while true do
--В случае подключения большего количества строк нужно скопировать все следующие строки
--с изменением координат до os.sleep
proxmfsu1=com.proxy(com.get("АДРЕС МФСУ"));
local eu1=proxmfsu1.getStored();
com.gpu.fill(1,3,80,25," ");
com.gpu.setForeground(0x66FF33);
com.gpu.set(1,3,"МФСУ 1");
com.gpu.set(1,4,eu1.." EU");
os.sleep(0.001);
end;
com.gpu.setBackground(0);

Еще одна интересная и полезная программа. На данный момент автокрафт из мода ProjectRed невозможен в связи с запретом использования Project Bench.Что же тогда делать? Не пользоваться автокрафтом вообще или использовать медленные верстаки из BuildCraft? А вот и нет. Ведь собрав своего робота из OC мы можем настроить его на автокрафт.
И так, что нам понадобится для этого:
  • Робот: (можно дополнить его своими компонентами по желанию)
Desktop_170414_0930.jpg

  • Зарядное устройство
  • Дискета с OpenOS
  • Сундук
  • Алмазная мотыга(да, именно она)
После того как собрали робота, установили на него OpenOS,и собрали все необходимые компоненты, то устанавливаем все вот так:
Desktop_170414_0939.jpg

В самом низу - зарядное устройство. Красный факел служит для его включения. Вы можете делать это по другому.
Потом создаем новую программу:
Код:
local component = require("component")
local c = component.crafting
local ic = component.inventory_controller
local r = require("robot")

numslot = ic.getInventorySize(1)
hotslotchest = 0
if numslot == nil then
print("Сундук над роботом не найден!")
else
print("Всего слотов в сундуке:"..numslot)
end
if(ic.getStackInSlot(1,1) ~= nil) then
if(ic.getStackInSlot(1,1)["label"] == "Diamond Hoe") then
file = io.open(os.getenv("PWD") .."curentcraft.txt","w")
for j = 2, 10 do
if ic.getStackInSlot(1,j) == nil then
item = "<empty>"
else
item = ic.getStackInSlot(1,j)["label"]
end
file:write(item.."\n")
end
file:close()
print("Крафт успешно записан!")
os.exit()
end
end
file = io.open(os.getenv("PWD") .."curentcraft.txt","r")
 if file == nil then
 print("Файл крафта не найден!")
 os.exit()
 end
 local arr = {}
 for line in file:lines() do
    table.insert (arr, line);
 end
file:close()
setkacrafta = {1,2,3,5,6,7,9,10,11}
itemforcraft = {arr[1], arr[2], arr[3],arr[4],arr[5],arr[6],arr[7],arr[8],arr[9]}
r.select(4)

function craftthis(counts)
i = 0
while i < counts do
c.craft(64)
r.dropUp(64)
i = i + 1
end
end

function loadItem(robotslot, chestslot)
if chestslot == 0 then
print("В сундуке не найден нужный предмет!")
unloadallitem()
else
ic.suckFromSlot(1,chestslot,64)
r.transferTo(robotslot,64)
end
end

function unloadallitem()
for j = 1, 16 do
r.select(j)
r.dropUp(64)
end
r.select(4)
end

function finditem(nameitem)
onlyfirst = 0
Cnumslot = numslot
i = hotslotchest
::startfind::
while i < Cnumslot do
i = i + 1
ItemStack = ic.getStackInSlot(1,i)
 if ItemStack ~= nil then
 if ic.getStackInSlot(1,i)["label"] == nameitem then
 hotslotchest = i
 return i
 end
 end
end
i = 0
Cnumslot = hotslotchest
onlyfirst = onlyfirst + 1
if onlyfirst == 1 then goto startfind end
return 0
end

doWork = true
 while doWork do
 craftthis(1)
for j = 1, 9 do
if itemforcraft[j] ~= "<empty>" then
  if r.count(setkacrafta[j]) < 1 then
  print("Кончилось "..itemforcraft[j].." в слоте "..setkacrafta[j].."...")
  loadItem(setkacrafta[j],finditem(itemforcraft[j]))
     if r.count(setkacrafta[j]) < 1 then
     doWork = false
     break
     end
  end
end
end
end
Когда программа создана и уже записана в памяти робота, то пора записать рецепт вещи, которую он будет крафтить. Для этого ингредиенты крафта следует разместить следующим образом:
1362

Когда мы все разместили, то запустим нашу программу еще раз. Нам напишет, что рецепт записан. Убираем мотыгу и запускаем её снова. И робот начнет крафтить вещи и складывать их в тот же сундук.

Последняя программа написана не мною. Она является очень удобным файловым менеджером. Который позволит вам даже без MineOS в графическом интерфейсе перемещать\копировать файлы и папки.

Статья будет дополнятся
Так же могу выместить некоторые свои 3д модели, если это будет нужно.(Пишите ниже, нужно или нет)

Надеюсь эта короткая статья поможет кому-то из новичков в OpenComputers
 
Последнее редактирование:
  • Like
Реакции: harati и b4z3n