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

Clor

Пользователи
  • Публикации

    45
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3

Все публикации пользователя Clor

  1. Вот такой класс получился нормально? https://github.com/Clor0xD/OpenComputers2IDE.git посмотреть lua ооп потуги можно тут) https://github.com/Tencent/LuaHelper отличный плагин на vscode классы (включая множественное наследование), типы, подсказки, аннотации ---@class IRunable local IRunable IRunable = {class = "Interface IRunable"} function IRunable:run(...) self:noImplIntefaceError("run(...)", IRunable:getClassName()) end return IRunable --- --- Generated by EmmyLua(https://github.com/EmmyLua) --- Created by User. --- DateTime: 20.04.2022 20:14 --- local Class = require('libEx/Class') local sides = require("sides") ---@class Position:Class ---@field public x number ---@field public y number ---@field public z number ---@field public r PositionSide local Position = Class:extended({ class = "Class Position" }) ---@class PositionSide Position.side = { north = 0, east = 1, south = 2, west = 3, negZ = 0, posX = 1, posZ = 2, negX = 3 } ---@class PositionSidesBySide Position.sidesBySide = { [Position.side.negZ] = sides.negz, [Position.side.posX] = sides.posx, [Position.side.posZ] = sides.posz, [Position.side.negX] = sides.negx } ---@class PositionSideBySides Position.sideBySides = { [sides.negy] = Position.side.negZ, [sides.posy] = Position.side.negZ, [sides.negz] = Position.side.negZ, [sides.posx] = Position.side.posX, [sides.posz] = Position.side.posZ, [sides.negx] = Position.side.negX } ---@class PositionTurn Position.turn = { left = -1, forward = 0, right = 1, around = 2, back = 2 -- left = 3 } ---@param x number ---@param y number ---@param z number ---@param r PositionSide ---@return Position function Position:new(x, y, z, r) local instance = self.super:new() if not x then return self:extendedInstance(instance):set(0, 0, 0, 0) end return self:extendedInstance(instance):set(x, y, z, r) end ---@param adjacentPosition Position ---@return boolean,Sides @staus globalRotation:Sides_openOs function Position:getAdjacentSide(adjacentPosition) local this, adjacent, acc, check, result = self:get("yzx", true), adjacentPosition:get("yzx", true), 0, 0, 0 for i = 1, 3 do check = adjacent[i] - this[i] if check == 1 then result = i * 2 - 1 elseif check == -1 then result = i * 2 - 2 end acc = acc + check end return acc == 1 or acc == -1, result end ---@ changes self ---@param positionORx Position ---@param y number ---@param z number ---@return Position @self function Position:add(positionORx, y, z) if positionORx.class then self.x = self.x + positionORx.x self.y = self.y + positionORx.y self.z = self.z + positionORx.z return self end self.x = self.x + positionORx self.y = self.y + y self.z = self.z + z return self end ---@ changes self ---@param position Position ---@return Position @self function Position:sub(position) self.x = self.x - position.x self.y = self.y - position.y self.z = self.z - position.z return self end ---@ does not change sefl, args ---@param position Position ---@return number, number, number @x,y,zlua function Position:subCortage(position) return self.x - position.x, self.y - position.y, self.z - position.z end function Position:coordsEquels(position) return self.x == position.x and self.y == position.y and self.z == position.z end function Position:equels(position) return self == position or (self.x == position.x and self.y == position.y and self.z == position.z and self.r == position.r) end function Position:get(format, isPack) if format == nil then if isPack then return {self.x, self.y, self.z, self.r} end return self.x, self.y, self.z, self.r end if self:assertFormat(format) then local result = {} for key in format:gmatch '[xyzr]' do table.insert(result, self[key]) end if isPack then return result end return table.unpack(result) end end function Position:setf(format, ...) self:assertFormat(format) local args = table.pack(...) assert(#format <= #args, self:tostring() .. ":setf(format, ...) argument (...) very short") for i = 1, #format do self[format:sub(i, i)] = args[i] end return self end function Position:set(x, y, z, r) -- self.x, self.y, self.z, self.r = x, y, z, r -- return self return self:setf("xyzr", x, y, z, r) -- assert params end function Position:clone() -- local returnPos; returnPos = currentPos:clone() return self:new(self:get()) end function Position:copy(position) -- returnPos:copy(currentPos) return self:set(position:get()) end function Position:getCoordinatesUp() local x, y, z, r = self:get() return x, y + 1, z, r end function Position:getCoordinatesDown() local x, y, z, r = self:get() return x, y - 1, z, r end function Position:getCoordinatesLocalRotation(turn) self:getCoordinatesGlobalRotation((turn + self.r) % 4) end function Position:getCoordinatesGlobalRotation(side) local x, y, z, r = self:get() if side == self.side.negZ then z = z - 1 elseif side == self.side.posZ then z = z + 1 elseif side == self.side.negX then x = x - 1 elseif side == self.side.posX then x = x + 1 end return x, y, z, r end function Position:turnRight() self.r = (self.r + 1) % 4 return self end function Position:turnLeft() self.r = (self.r - 1) % 4 return self end function Position:turnAround() self.r = (self.r + 2) % 4 return self end function Position:stepUp() self.y = self.y + 1 return self end function Position:stepDown() self.y = self.y - 1 return self end function Position:stepForward() return self:stepBase(1) end function Position:stepBack() return self:stepBase(-1) end function Position:calculateTurn(globalRotation) return ((globalRotation - self.r) + 4) % 4 end ---@private function Position:assertFormat(format, message) if not format or type(format) ~= 'string' then format = type(format) -- if not massage then message = ' incorrect argument format type : ' .. format .. ' [xyzr] string only' -- end error(self:tostring() .. message) end if #format == 0 then -- if not massage then message = 'incorrect argument format : empty_string' -- end error(self:tostring() .. message) end if not massage then message = ' incorrect argument format : ' .. format .. ' [xyzr] only' end return assert(not format:match '[^xyzr]', self:tostring() .. message) end ---@private function Position:stepBase(dir) if self.r == self.side.negZ then self.z = self.z - dir elseif self.r == self.side.posZ then self.z = self.z + dir elseif self.r == self.side.negX then self.x = self.x - dir elseif self.r == self.side.posX then self.x = self.x + dir end return self end function Position:toStringDebug() return "x: " .. tostring(self.x) .. " y:" .. tostring(self.y) .. " z:" .. tostring(self.z) .. " r:" .. tostring(self.r) end function Position:print() print(self:toStringDebug()) return self end return Position -- -- Created by Clor#D on 17.05.2020. -- ©SofaSolt, 2020 -- ---@class Class ---@field public class string ---@field public super Class ---@field public isInstance boolean ---@field public clazz Class @ is not instanse class local Class if Class then return Class end Class = {} Class.class = "Class Class" Class.isInstance = false Class.super = Class Class.clazz = Class function Class:tostring() return tostring(self) .. " " .. self.class end function Class:extended (child) -- child = {} -- наследование статичестой части таблица Class, child.super доступ к статической таблице родителя child.super = self setmetatable(child, { __index = self, isInstance = false}) child.clazz = child return child end ---@class Interface ---@field public class string ---@param ... Interface function Class:implements(...) ---@type Interface[] local interfaceList = table.pack(...) for _,interface in ipairs(interfaceList) do interface.super = self.super setmetatable(interface, { __index = self.super, isInstance = false}) self.super = interface setmetatable(self, { __index = interface, isInstance = false}) end return self end function Class:extendedInstance(instance) -- наследование экземпляра таблица instance setmetatable(instance, self) self.__index = self return instance end function Class:new() local instance = {isInstance = true} return self.clazz:extendedInstance(instance) end function Class:noImplError(funcName) if not funcName then funcName = 'unknownFunc' end error(self:tostring() .. ':' .. funcName .. ' no implementation') end function Class:noImplIntefaceError(funcName, interfaceName) if not funcName then funcName = 'unknownIntefaceFunc' end error(self:tostring() .. ':' .. funcName .. ' no implementation '..interfaceName..":"..funcName) end function Class:assert(param, message) if not message then message = 'assert unknown param' end return assert(param, self:tostring() .. message) end function Class:assertNumberSetDefault(number, default, message)-- number = '100' if not message then message = 'assert unknown param' end if number == nil then if tonumber(default) then number = default else error(self:tostring() .. message .. " is nil") end end return assert(tonumber(number), self:tostring() .. message .. " not number") end function Class:assertNumber(number, message) return self:assertNumberSetDefault(number, nil, message) end function Class:assertEnum(param, enum, message) for _,element in pairs(enum) do if param == element then return param end end self:error(message.." param: "..tostring(param).." not listed") end function Class:error(message) error(self:tostring()..message) end function Class.nop() end function Class:getClassName() local _, name = string.gmatch(self.class, "([%a%d].+)%s(.+)")() return name end function Class:getClassLevel() local type = string.gmatch(self.class, "([%a%d].+)%s(.+)")() return type end function Class:assertInstance(message) if self.isInstance then return true end self:error(message) end function Class:assertSuperParentClass(param, sampleClass, message) ---@type Class local temp = param while temp.class ~= Class.class do if temp.class == sampleClass then return param end temp = temp.super end self:error(message.." "..param.class.." not extended "..sampleClass) end ---@param fieldName string ---@param fileldValue any function Class:createFieldIfMissing(fieldName, fileldValue) if self[fieldName] == nil then self[fieldName] = fileldValue end end return Class --[[ Using Class = require("/oop/Class") local Implementation if Implementation then return Implementation end Implementation = Class:extended({})-- "наследования" класса, по сути соеденение статических таблиц в иерархию наследования Implementation.class = "Implementation" function Implementation:toString() return self.class end function Implementation:new(stringParent, stringChildren) local instance = self.super:new(stringParent) -- конструктор предка self.stringC = stringChildren return self:extendedInstance(instance) -- "наследования" экземпляра, по сути соеденение таблиц экземляра в иерархию наследования end return Implementation ]]
  2. @LeshaInc там в МЕ бывают одинаковые по лейблу. Наверно в этом проблема. Ну одинаковые предметы но не стакаются. Если руками автокрафт заказать пашет?
  3. робо-сундуковые технологии? как интересно.
  4. @Firec может вас стоить IDE использовать? IDEA например? сразу бы увидели это. Как видно аргументы бирюзовые. пишите в личку если помощь с IDE надо
  5. Описание в разработке... Хочу узнать, есть ли потребность вот в таких программах? (есть еще контроллер рудо переработки gt5u, me телепор хотя его уже делали тут вроде.) Данная программа позволяет работать с Assemly Line GT5U из ME как с обычным механизмом, и автоматизирует множество "мучительных" рецептов. https://pastebin.com/PAYBy5Lm
  6. Думаю так лучше. Asior значит ты на атомик варс собрался снимать...
  7. Хорошо, оформлю. В целом там адаптер к ме интерфейсу цепонуть и все. Смысл именно такой, как ты понял. Я думал слово прекрафт говорит за себя. К сожалению user frendly конструктор конфигов я не написал, так что нужен "advanced user"))) потихоньку буду улучшать. Потому шапка темы такая, на программиста.
  8. Этого сайта. Ты тогда свой банк пилил. Может ты не помнишь, но я собирал пару сборок для нашего первого сервера. Тогда еще была хурма с бесплатным vds
  9. А причем тут openOS и API компонентов? или ты о OpenComputers-MC1.7.10-1.7.4.1265-universal.jar Дак его хаяли я ставить не стал. По поводу ничего особенного, ну это сборка а не куча модов, как было года CC стартовал. Я имею ввиду что там рецепты переделаны GT5U модифицирован итд итп. Я помню ту кучу что собирал для 1,5,2 и 1.6.4 CC. А еще вспомнил как мы не договорились о дизайне сайта и недели две была какая то дичь а не оформление. Весело было) Стоит ли пробовать OC + fix?
  10. 1.7.10 OpenOS 1.7.2 CPU Lua 5.2 OpenComputers-MC1.7.10-1.7.2.1166 Computronics-1.7.10-1.6.6 Сейчас я делаю к сборке Copmuter addon так сказать, рецепты там переписываю конфиги настраиваю. По умолчанию OC отключен в сборке, и заброшен пару лет как, но думаю это не на долго. https://vk.com/ideal_industrial детали сборки можешь сам посмотреть.
  11. Позволяет обойти разные узкие места в системе автокрафта. Система отслеживает кол-во разных предметов в МЕ и в соответствии с настройками докрафчивает до нужного количества. Ну напримем есть какая то штука которая долго делается но нужна нечасто, разумно заготовить энное количество пока база простаивает. Я играю в сборку ИИС. И она предлагает много интересных инженерных задач. Это одно из решений. Доведу до ума еще пару вещей и выложу.
  12. Программа находится в разработке. Постараюсь упростить процесс настройки программы. Данная программа сканирует содержимое вашей МЕ системы и поддерживает заданное количество указанных в списке предметов. Иными словами предварительно крафтит (preCraft). Это полезно на развитых индустриальных базах, где практически всегда есть медленные рецепты с высокой импульсной нагрузкой, так что если заранее их выполнить можно повысить быстродействие вашего автокрафта. Основой системы является то, что me_interface предоставляет нам информацию о содержимом МЕ и о списке крафтов, а так же предоставляет объекты управления заказанными из OC крафтами. К сожалению получить информацию от текущих крафтах заказанных не из ОС не возможно. Так же API содержит ряд багов по работе со списком предметов в МЕ, а именно некорректно написан фильтр (подробнее можете сами посмотреть на git AE если конечно понимаете scala). В связи с вышеперечисленным требуется много ОЗУ >2mb. Из периферийных устройств нужен adapter подключенный к ме интерфейсу и database https://ocdoc.cil.li/item:database_upgrade для формирования списка прекрафтов. Я постарался минимизировать блокирующие вызовы, однако сканирование списка крафтов при начальной инициализации системы занимает много времени. Установка pasebin get 5hnW78DU preCraft.lua Настройка Первоначально вам необходимо отредактировать код программы. (позже сделаю утилиту конструктор) edit preCraft.lua советую провести манипуляции в текстовом редакторе а потом вставить изменения в ОС На 32 строчке программы находится local preCrafts = { { size = 1000, label = nil, alias = "SoC", craft = nil, progress = nil }, { size = 1000, label = nil, alias = "ASoC", craft = nil, progress = nil } } 33 и 34 строчки это и есть прекрафты, вам необходимо заполнить поля size = сколько штук поддерживать поле alias необходимо т.к некоторые моды что используют свою систему предметов например GregTech, Immersive Engineering выдают не человеко читаемые имена блоков. Если вас это устраивает alias = nil если нет пропишите имя руками alias = "название вашего предмета" теоретически длинна списка не ограничена, однако database t3 содержит 81 предмет и в данный момент дописывание в конец списка не реализовано. для увеличения списка просто вставьте между 33 и 34 строчками еще строчек и отредактируйте их { size = 1000, label = nil, alias = "SoC", craft = nil, progress = nil }, обратите внимание что в конце списка строка не содержит запятой { size = 1000, label = nil, alias = "ASoC", craft = nil, progress = nil } параллельно с составлением списка добавляйте предметы в database первый слот database соответствует первой строке списка и так далее local preCrafts = { первая строка списка{ size = 1000, label = nil, alias = "SoC", craft = nil, progress = nil }, вторая строка списка{ size = 1000, label = nil, alias = "ASoC", craft = nil, progress = nil } } После окончания заполнения списка и database положите database в адаптер и запустите программу с параметрами --int2ext --pclName=preCraftList.lua preCraft.lua --int2ext --pclName=preCraftList.lua программа создаст файл preCraftList.lua после чего database больше не требуется Запуск программы preCraft.lua --extList --pclName=preCraftList.lua --thrLim=4 параметр --thrLim=4 определяет сколько крафтовых процессоров использует программа одновременно, по умолчанию 2 (если этот параметр не указывать) автозапуск программы можно организовать добавив вашу строку запуска preCraft.lua --extList --pclName=preCraftList.lua --thrLim=4 в .shrc https://pastebin.com/5hnW78DU p.s написано под разрешение 160*50. работать будет на любом но консоль отобразится некорректно
  13. IDEA + EmmyLua + Файлы заглушки для компонентов итд. https://www.dropbox.com/s/82yd0cebqabpiqi/src.rar?dl=0 Есть парсер доков в заглушки, но с косяками писал не я, сравните доки которые он умеет и те что дает вам components -l [component] > [filename] при необходимости уберите ; поставьте -- Пишу как если б это было java со всеми плюшками.
  14. Для работы необходимо поставить адаптер к батт буфферу, и подключить redstone_io он будет давать сигнал на включение турбин или что там у вас. В шапке программы есть настройки цветов и выбор стороны redstone_io. Есть возможность избавится от API computronics и повысить быстродействие сократив количество блокирующих вызовов, сделаю чуть позже. Установка pastebin get mRRyyAmQ powerControl.lua https://pastebin.com/mRRyyAmQ pastebin get M4QEejED powerControl.lua https://pastebin.com/M4QEejED новое api .getSensorInformation() + конфиги
  15. крашится клиент это раз, во вторых проблемы т с русским языком ибо юникод, инглишь все норм, можно сделать отключаемым, аля галочка в лаунчере.
  16. Всем привет, такой вот вопрос : а почему у нас нет оптифайна? Что мешает добавить его в сборку?
  17. Вы не поверите, сябро я и еще пара человек начали пилить игру на юнити (в смысле разрабатывать). Но потом господин сябро решил написать OS на луа. Саш ну зачем оно тебе надо?
  18. Clor

    Ферма дерева

    Ну вот решил зайти.
  19. Clor

    Ферма дерева

    Эх. Вот вам версия на CC http://pastebin.com/jBiX8aaB
  20. эх жаль термалку, Алекс ты ее убираешь из за простоты ли из за нагрузки? если первое, то можно сделать так 1 крафт всех машин со сталью 2 крафт пульвилизатора и смелтера с алмазми 3 смелтер не делает сталь если второе то с жертвами всегда так... энерготрубы там хороши(((. А вообще о сложности модов... 3 алмаза 7 камня 1 редстоун 2 палки 1 сундук 1 стеклянная панель и программа добычи ресов + стек древесного угля... и МНОГО ресурсов будет ОТВЕЧАЮ) так что СС всю хардкорность lim=>0 Надеюсь будет интересно)
  21. Алекс давай донат поставим, оставим 15 модов чтоб на 1 ядерных пк с 2гб шло и будем как все... будет онлайн 100+ но будут дети лет по 10. И будут они у тебя потому что, на их "фикальных" пк больше не идет ничего. Хочешь аудиторию 16+60% и от 18 30% да еще с мозгами не делай глупости.!!!!
  22. я не хаю, мы почитали с фениксом и ростиславом... ммм нет не интересно. А с проекта я не ухожу, просто на сервере наигрался)))) кстати текущий сервер 5+
  23. Алекс ты для себя сборку делаешь? В смысле ОДИН будешь играть?!!! я off/
×
×
  • Создать...