всем спасибо за ответы, но я уже разобрался.... просто было странно в программе экскаватора видеть каждую строчку начинающую с local оказалось если не объявлять переменную через локал, она будет доступна даже после выхода с программы. и если запустить например сначала программу например peremechenie в которой была переменная dX(без local), а потом запустить программу pozicionirovanie с одной строчкой print(dX), то он выведет параметр dX оставшееся от первой программы.... кстати я бы добавил в гайд способ, как написать программу в которую помимо имени можно указывать входящие параметры
Скрытый текст
сам до конца не разобрался, но: если в самом начале добавить переменную например var в виде var = ... то при вызове программы, можно будет указывать доп параметр вызова... если же параметров надо несколько, вызов должен быть вида var = { ... } где к каждому параметру можно обратиться через var[i]
пример программы которую я написал для того чтобы черепашка вырывала комнату с размерами х,у,z
Скрытый текст
vData = { [paste][/paste][paste][/paste][paste][/paste] } if #vData ~= 3 thenprint("comand: cubeXYZ <length> <width> <depth>")returnend--считываем параметры вызова функции, если их не 3, выводим сообщение и закрываем программуlocal x,y,z = tonumber(vData[1]),tonumber(vData[2]),tonumber(vData[3])if ((x<=0) or (y<=0) or (z<=0)) thenprint("incorrect variable");returnend--проверяем правильность вводимых данныхlocal function ref()for i=1,16 doturtle[paste][/paste]select(i)if turtle[paste][/paste]refuel() then returnendendprint("need fuel: ",-dFuel)enddFuel = turtle[paste][/paste]getFuelLevel() - x*y*zwhile (dFuel < 0) doref()dFuel = turtle[paste][/paste]getFuelLevel() - x*y*zend--проверяем хватит ли топливаlocal function m1d()for i=1,x-1 doturtle[paste][/paste]dig()turtle[paste][/paste]forward()endendlocal ang = 0local function rot()if ang == 0 then turtle[paste][/paste]turnLeft()turtle[paste][/paste]dig()turtle[paste][/paste]forward()turtle[paste][/paste]turnLeft()ang = 1elseturtle[paste][/paste]turnRight()turtle[paste][/paste]dig()turtle[paste][/paste]forward()turtle[paste][/paste]turnRight()ang = 0endendlocal function m2d()m1d()for j=2,y dorot()m1d()endendlocal function m3d()m2d()for k=2,z doturtle[paste][/paste]digDown()turtle[paste][/paste]turnRight()turtle[paste][/paste]turnRight()turtle[paste][/paste]down()m2d()endendm3d()-- функции m1d, m2d и m3d создают линию, плоскость и объем соответственно
ставим черепашку в верхний правый угол, и вызываем программу например cubeXYZ 5 3 3 upd: вставил программу
рандом он такой рандом....а если корейский так вообще забей)
Я хотел сделать черепаху чтобы она чарила книги и атаковала одновременно...
Я такое делал недавно:
xp = peripheral[paste][/paste]wrap("right")xp[paste][/paste]setAutoCollect(true)function attack() while true do sleep(0[paste][/paste]2) turtle[paste][/paste]attack() endendfunction enchant() while true do sleep(10) if turtle[paste][/paste]getItemCount(1) > 1 and xp[paste][/paste]getLevels() >= 30 then turtle[paste][/paste]select(1) xp[paste][/paste]enchant(30) turtle[paste][/paste]select(2) turtle[paste][/paste]dropUp() end endendparallel[paste][/paste]waitForAny(attack, enchant)
Ну, в общем, в первом слоту книги, во второй она кладет зачарованные книги и выбрасывает их вверх.
обязательно обновлю... на меня сейчас просто наседает научный руководитель по поводу магистерской... как только появляется время, добавляю по кусочкам в переводы аддоновXP черепашка крафтится объединением черепашки и стола замуровывания.апи черепашкиadd(amount): добавляет черепашке опыт из бутылки или яйца призываget(): возвращает кол-во опыта в черепашкеgetLevels(): возвращает лвл черепашкиcollect(): собирает вокруг себя орбы с опытом, радиус сбора - 2 клеткиsetAutoCollect(autoCollect): если вместо autoCollect написать true, будет собирать орбы автоматом, если false - перестанетenchant(levels): зачаровывает предмет в выбранном слотеget/getUp/getDown(): собирает ХР из банок, черепашек или печек.чтобы обратиться к одной из процедур надо связать стол зачаровывания с переменной(например p0 = peripheral.wrap("right"))и дальше обращаться через нее к процедурам( например p0.setAutoCollect(true))
рандом он такой рандом....а если корейский так вообще забей)
Заморишься так объявлять переменные, а потом объяснять зачем они нужны. У меня в программе
xp = peripheral[paste][/paste]wrap("right")
и то понятней, хоть и делал без рассчёта кому-то показывать.
а как книги в нее складываются? обычные
По трубам.
А зачарованные именно выкидываются, потому что деревянная и обычные высосет. Хотя можно сделать загрузку и с помощью turtle.suck(), но тогда в лучшем случае ей придёться вертеться, а в худшем ездить и тратить топливо.
мне get() всегда 0 возвращает, но getLevels() работает исправнои соглашается зачаровать книгу только тогда, когда в слоте она одна, сейчас организовываю бред с детектором предметов
ну с такими лагами можно использовать процедуру turtle.transferTo(slot, quantity) с помощью ее, передавать книгу в слот который по умолчанию будет всегда пустым, и в нем зачаровывать...
рандом он такой рандом....а если корейский так вообще забей)
Можно ли в игре посмотреть API для каждого из Peripheral'ов? А то запоминать как-то сложно.
Цитата с офф вики:
peripheral.getMethods(side) Returns a table containing all methods for peripheral on side.
Т.е возвращает таблицу с методами. Сам не пользовался этой командой, если честно предпочитаю набирать код в Notepad++, это гораздо удобнее и нагляднее, апи смотрю в офф вики. В компе набираю только совсем простенькие проги вроде хоста GPS или атакующую черпаху.
У miscPeripherals есть вики? Можно ссылочку? Кстати, кто может помочь с написанием зачаровывающей-атакующей черепахи?
m=peripheral[paste][/paste]wrap("right")while true doturtle[paste][/paste]attack()m[paste][/paste]collect() if m[paste][/paste]getLevels()==30 then select(1) -- Слот с книгами m[paste][/paste]enchant(30) select(2) -- Пустой слот, куда кладётся зачарованная книга turtle[paste][/paste]drop() endend
может включи автоматическое собирание орб?m.setAutoCollect(true)в цикл добавь sleep(8)и проверь через lua, желает ли твоя черепаха зачаровывать предметы, если их не 1 штука, у меня не желаети лёгкий флудесть ли ещё кто-то, кто юзает while(1)?
m=peripheral[paste][/paste]wrap("right")while true doturtle[paste][/paste]attack()m[paste][/paste]collect() if m[paste][/paste]getLevels()==30 then select(1) -- Слот с книгами m[paste][/paste]enchant(30) select(2) -- Пустой слот, куда кладётся зачарованная книга turtle[paste][/paste]drop() endend
Моя же прога, только в профиль один поток.
setAutoCollect(true) и вправду смотрится лучше.
sleep(8) не надо, потому что у него, как я писал, один поток и turtle.attack() будет плохо работать.
Хотя бы зачарование в отдельную локальную функцию вынес.