Jump to content


Photo

[1.7.10] ComputerCraft [1.74]


  • Please log in to reply
2863 replies to this topic

#2481 KaMaPuK

KaMaPuK

    Добытчик алмазов

  • Пользователи
  • Active Posts681
  • Откуда: СПб

Posted 24.08.2013 - 12:42

вчера сделал движущийся завод на фреймах Redstone in motion... но тут возникла проблема, если платформа сталкивается с препятствием, то компьютер выходит из программы... как следствие, перестает отвечать на команды управления... можно ли как нибудь, удаленно перезагружать комп? сейчас спасает только перезаход в игру
рандом он такой рандом....а если корейский так вообще забей)

#2482 IIazaH4er

IIazaH4er

    RIP

  • Пользователи
  • Active Posts4022

Posted 24.08.2013 - 12:43

Если компьютер находится на фреймах - убери его оттуда и используй Wireless Redstone

#2483 KaMaPuK

KaMaPuK

    Добытчик алмазов

  • Пользователи
  • Active Posts681
  • Откуда: СПб

Posted 24.08.2013 - 12:59

при управлении с редстоном есть один недостаток... используя лишь сапорт фреймы, ты не построишь платформу, которая движется во всех направлениях(для движения вверх надо под двигатель подводить сигнал, а там двиг цепляется к фреймам)... к тому же надо думать как расположить 2 двигателя и проводку к ним. гораздо удобнее для этого использовать СС...
рандом он такой рандом....а если корейский так вообще забей)

#2484 IIazaH4er

IIazaH4er

    RIP

  • Пользователи
  • Active Posts4022

Posted 24.08.2013 - 13:16

Мне вот интересно: а как ты без редстоуна только с компьютером это всё подключил?Я имею ввиду не полностью убрать компьютер, а управлять фреймами через WR, который передаёт сигналы редстоуна от компьютера к фреймам.

#2485 DАNТES

DАNТES

    Странник

  • Пользователи
  • Active Posts16

Posted 24.08.2013 - 13:38

Помогите, вот я решил сделать установку на черепашку специального ПО "Стандартного" для этого я хочу, чтобы из диска файл перекидывался в компьютер. ВОПРОС: Как через программу использовать такие действия как cd .. , cd \ ? Потому, что через dofile() не получается, а так же, как мне понять в какую папку кидать? Мне придётся узнавать ид компьютера? Если я буду работать с Startup диска, то мне придётся узнавать Ид компьютера не обычным способом. ВОПРОС 2: Как мне проверять нажатие клавиш? У меня есть таблица номеров кнопок Lua , а как проверять их нажатие на знаю.
Зацени граффити!
Скрытый текст

#2486 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Active Posts183

Posted 24.08.2013 - 13:57

Чтобы указать не относительный, а абсолютный путь, нужно чтобы путь был вида "/папка/папка" (первый символ "/"), родительская директория директория это "..", например "../папка". Чтобы узнать id, os.getID(). Нажатие клавиш - это событие. События ловятся при помощи os.pullEvent(), которая возвращает имя события и до 5 аргументов.
local e, p1, p2, p3, p4, p5 = os[paste][/paste]pullEvent()if e == "key" then    print("Eto knopochka!")end
Таблица с кнопками есть у всех, она называется keys.
local e, p1, p2, p3, p4, p5 = os[paste][/paste]pullEvent()if e == "key" and p1 == keys[paste][/paste]rightCtrl then    print("Nazhat praviy ctrl!")end


#2487 KaMaPuK

KaMaPuK

    Добытчик алмазов

  • Пользователи
  • Active Posts681
  • Откуда: СПб

Posted 24.08.2013 - 13:58

Мне вот интересно: а как ты без редстоуна только с компьютером это всё подключил? Я имею ввиду не полностью убрать компьютер, а управлять фреймами через WR, который передаёт сигналы редстоуна от компьютера к фреймам.

В моде Redstone In Motion есть Carriage controllers, который управляется компом напрямую....
рандом он такой рандом....а если корейский так вообще забей)

#2488 semoro

semoro

    Странник

  • Пользователи
  • Active Posts28

Posted 24.08.2013 - 15:26

Это гайд, он будет коротким, но полезным. Вы когда нибудь задумывались, как можно перехватывать вызов native функций, таких как
term[paste][/paste]write
или
os[paste][/paste]startTimer
Во время разработки MineX OS я столкнулся с проблемой, мне нужно было перехватить term.setCursorBlink и я хочу поделиться своим опытом Сделать это можно используя перезапись функций Например:
nativeterm={} --создаём таблицу для харнения native функцийnativeterm[paste][/paste]write=rawget(term,"write") -- при работе с нативными ф-циями необходимо игнорировать все метаметодыrawset(term,"write",function(arg)nativeterm[paste][/paste]write("вызванн term[paste][/paste]write("[paste][/paste][paste][/paste]arg[paste][/paste][paste][/paste]")")end) -- перезаписываем нативную функцию, после её сохранения
Запускать этот код можно только один раз, от включения до выключения компа, ибо второй вызов создаст зацикливание и положит систему Теперь любой вызов ф-ций print, write, term.write Будет выводить "вызванн term.write( аргумент )" Так-же можно поступать с любыми нативными ф-циями
CraftOs уже не торт? Ставь MineX!
Тысяча ошибок против одного моддера - суровая правда жизни!

#2489 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Active Posts183

Posted 25.08.2013 - 00:14

Если тебе нужно ЗАМЕНИТЬ нативную функцию, то в чем проблема?
newterm  = {}newterm[paste][/paste]write = term[paste][/paste]writeterm[paste][/paste]write = function(s)      newterm[paste][/paste]write(s[paste][/paste][paste][/paste]"что-то там")end
Но можно сделать просто обёртку, ведь понятно, что нативную функцию придется сохранять (в массив newterm или nativeterm)
function myapi[paste][/paste]write(s)     term[paste][/paste]write(s[paste][/paste][paste][/paste]"что-то там")end
У функции по умолчанию нет метатаблицы.
print(getmetatable(function(s) term[paste][/paste]write(s) end))
> nil Камарик, когда miscperipherals допереведешь?

#2490 KaMaPuK

KaMaPuK

    Добытчик алмазов

  • Пользователи
  • Active Posts681
  • Откуда: СПб

Posted 25.08.2013 - 09:21

уже вплотную работаю над этим. летом ездил по родственикам, не было интернета... и сейчас со свежими силами снова взялся за перевод.
рандом он такой рандом....а если корейский так вообще забей)

#2491 DАNТES

DАNТES

    Странник

  • Пользователи
  • Active Posts16

Posted 25.08.2013 - 11:20

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

Прошу меня извинить за черезчур импульсивную настойчивость, но я так и не понял как проверять нажатие кнопок. Можете объяснить мне на пальцах. Вот если меня человек спрашивает, к примеру, как в gml проверить нажатие кнопки W, то я ему так и объясню: Вот код:
if keyboard_check(ord"W") then{/*Действие*/}
Разберём код:

if - по английски ЕСЛИ. keyboard_check - функция нажатия клавиши. (ord"W") - клавиша которую нужно нажать. Разные клавиши обозначаются по разному, например, чтобы проверять нажатия таких клавиш, как SHIFT, CTRL, ALT, ENTER, SPACE ... нужно писать vk_shift (Если нужно использовать определённый shift, то используйте приставки L и R "vk_lshift" "vk_rshift" ), vk_control, vk_alt, vk_enter... все они пишутся так: (vk_shift) GML сам выделает клавиши которые он знает. Чтобы использовать клавиши мыши, используйте mb_left,mb_right... действуют они так же. всё.

А вот те скрипты которые ты мне написал, я так и не понял. Опробовал, программа перестаёт работать, даже не написав текст. [enderman]
Зацени граффити!
Скрытый текст

#2492 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Active Posts183

Posted 25.08.2013 - 11:29

По тому что в keys у правого шифта не то значение, а я не знал. Поменяй там на другую кнопку и всё будт хорошо.

#2493 DАNТES

DАNТES

    Странник

  • Пользователи
  • Active Posts16

Posted 25.08.2013 - 13:39

По тому что в keys у правого шифта не то значение, а я не знал. Поменяй там на другую кнопку и всё будт хорошо.

То есть? Мне надо сделать примерно так?
local e, p1, p2, p3, p4, p5 = os[paste][/paste]pullEvent() if e == "200" and p1 == "203" then print("Nazhat praviy ctrl!")end
Так? Я просто попробовал, не работает. Вот например я хочу при нажатии на кнопку влево (203 номер) выполнял действие turtle.turnLeft(), я примерный код настрочил, но он не работает, при нажатии на кнопку он просто завершает программу, выглядит она примерно так:
local e, p1, p2, p3, p4, p5 = os[paste][/paste]pullEvent()  if e == "203" then    turtle[paste][/paste]turnLeft()end
Можете исправить ошибку и объяснить её.
Зацени граффити!
Скрытый текст

#2494 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Active Posts183

Posted 25.08.2013 - 13:42

while true do    local e, k = os[paste][/paste]pullEvent()    if e == "key" and k == 203 then        turtle[paste][/paste]turnLeft()    endend
os.pullEvent срабатывает 1 раз, поэтому нужен цикл. Первый параметр, который возвращает pullEvent - название события. И <censored> числа без кавычек.

#2495 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Active Posts183

Posted 25.08.2013 - 13:47

Хэндлер для событий можно сделать так
function os[paste][/paste]pullEvent()	local e, p1, p2, p3, p4, p5 = os[paste][/paste]pullEventRaw()	if e == "terminate" then		error("Terminated")	else		return __HANDLER[e]() or (e, p1, p2, p3, p4, p5)	endend
Создать глобальную таблицу __HANDLER, где ключ - название события. Хотя придеться продумывать еще кучу моментов.

#2496 DАNТES

DАNТES

    Странник

  • Пользователи
  • Active Posts16

Posted 25.08.2013 - 13:58

while true do    local e, k = os[paste][/paste]pullEvent()    if e == "key" and k == 203 then        turtle[paste][/paste]turnLeft()    endend
os.pullEvent срабатывает 1 раз, поэтому нужен цикл. Первый параметр, который возвращает pullEvent - название события. И <censored> числа без кавычек.

Ну про числа я уже понял давно, привычка! полной картины кода не уловил, но кое какой вывод выходит. всё получилось, сделал наконец управление черепашкой, буду выпускать черепашки помощников загружая туда первоначально программу движения и дополнительных стандартных функций. Скажите? А нет ли такой функции в Lua которая бы записывала программу на диск, то есть, прописал (К примеру) burn("startup, down") (Я так к примеру название программы и сайд) и он записал программу на диск находящийся внизу в дисководе?
Зацени граффити!
Скрытый текст

#2497 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Active Posts183

Posted 25.08.2013 - 15:06

if fs[paste][/paste]exists("/disk") then    local _h = io[paste][/paste]open("disk/startup", "w")    _h:write("строка, весь файл")    _h:close()end
Даблпостить можно только автору темы, я просто в отдельном сообщении написал про хенлер событий. Объедени сообщения.

#2498 DАNТES

DАNТES

    Странник

  • Пользователи
  • Active Posts16

Posted 25.08.2013 - 16:09

if fs[paste][/paste]exists("/disk") then    local _h = io[paste][/paste]open("disk/startup", "w")    _h:write("строка, весь файл")    _h:close()end
Даблпостить можно только автору темы, я просто в отдельном сообщении написал про хенлер событий. Объедени сообщения.

Эх, задолбал я вас уже своими вопросами наверное. Последний вопрос (По крайней мере на сегодня). А есть скрипт наоборот? Ну то есть выкладывать с диска тот же самый файл? (О господи что я несу, раньше когда GML начинал изучать всё сам решал, всё находил сам помощи не просил, а как за Lua взялся, не могу сам) Вообще скиньте если не трудно скриптик. [snowman]
Зацени граффити!
Скрытый текст

#2499 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Active Posts183

Posted 25.08.2013 - 16:41

local file = ""if fs[paste][/paste]exists("/disk") then    local _h = io[paste][/paste]open("disk/startup", "r")    local line = _h:read()    repeat        file = file[paste][/paste][paste][/paste]line        line = _h:read()    until line == nil    _h:close()end


#2500 P-Funk

P-Funk

    Странник

  • Пользователи
  • Active Posts2

Posted 26.08.2013 - 12:05

Парни, подскажите пожалуйста.
Как можно реализовать по локальной сети:
1) Обращение(чтение, запись, дозапись) компьютера А к файлам компьютера Б?
2) Изменение кода программ, находящихся на компьютере Б, с компьютера А?
Доступного гайда по API peripheral не нашёл, да и о том, как реализовать его через Rednet тоже не имею представления.


2 user(s) are reading this topic

0 members, 2 guests, 0 anonymous users