[1.7.10] ComputerCraft [1.74]
#2481
Posted 24.08.2013 - 12:42
#2482
Posted 24.08.2013 - 12:43
#2483
Posted 24.08.2013 - 12:59
#2484
Posted 24.08.2013 - 13:16
#2485
Posted 24.08.2013 - 13:38
#2486
Posted 24.08.2013 - 13:57
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
Posted 24.08.2013 - 13:58
В моде Redstone In Motion есть Carriage controllers, который управляется компом напрямую....Мне вот интересно: а как ты без редстоуна только с компьютером это всё подключил? Я имею ввиду не полностью убрать компьютер, а управлять фреймами через WR, который передаёт сигналы редстоуна от компьютера к фреймам.
#2488
Posted 24.08.2013 - 15:26
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( аргумент )" Так-же можно поступать с любыми нативными ф-циями
#2489
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
Posted 25.08.2013 - 09:21
#2491
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... действуют они так же. всё.
#2492
Posted 25.08.2013 - 11:29
#2493
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
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() endendos.pullEvent срабатывает 1 раз, поэтому нужен цикл. Первый параметр, который возвращает pullEvent - название события. И <censored> числа без кавычек.
#2495
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
Posted 25.08.2013 - 13:58
Ну про числа я уже понял давно, привычка! полной картины кода не уловил, но кое какой вывод выходит. всё получилось, сделал наконец управление черепашкой, буду выпускать черепашки помощников загружая туда первоначально программу движения и дополнительных стандартных функций. Скажите? А нет ли такой функции в Lua которая бы записывала программу на диск, то есть, прописал (К примеру) burn("startup, down") (Я так к примеру название программы и сайд) и он записал программу на диск находящийся внизу в дисководе?while true do local e, k = os[paste][/paste]pullEvent() if e == "key" and k == 203 then turtle[paste][/paste]turnLeft() endendos.pullEvent срабатывает 1 раз, поэтому нужен цикл. Первый параметр, который возвращает pullEvent - название события. И <censored> числа без кавычек.
#2497
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
Posted 25.08.2013 - 16:09
Эх, задолбал я вас уже своими вопросами наверное. Последний вопрос (По крайней мере на сегодня). А есть скрипт наоборот? Ну то есть выкладывать с диска тот же самый файл? (О господи что я несу, раньше когда GML начинал изучать всё сам решал, всё находил сам помощи не просил, а как за Lua взялся, не могу сам) Вообще скиньте если не трудно скриптик. [snowman]if fs[paste][/paste]exists("/disk") then local _h = io[paste][/paste]open("disk/startup", "w") _h:write("строка, весь файл") _h:close()endДаблпостить можно только автору темы, я просто в отдельном сообщении написал про хенлер событий. Объедени сообщения.
#2499
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
Posted 26.08.2013 - 12:05
Как можно реализовать по локальной сети:
1) Обращение(чтение, запись, дозапись) компьютера А к файлам компьютера Б?
2) Изменение кода программ, находящихся на компьютере Б, с компьютера А?
Доступного гайда по API peripheral не нашёл, да и о том, как реализовать его через Rednet тоже не имею представления.
5 user(s) are reading this topic
0 members, 5 guests, 0 anonymous users