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


Фотография

[1.7.10] ComputerCraft [1.74]


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2863

#2221 adami

adami

    Добытчик угля

  • Пользователи
  • Сообщений: 318
  • Ник в Minecraft:
    _adami_

Написал 05.07.2013 - 07:24

Вот прямо так и писать. Что тебя смущает то? Скобки cc отлично понимаетshell.run("prog","arg1","arg2")

#2222 Ukrainian

Ukrainian

    Странник

  • Пользователи
  • Сообщений: 83

Написал 05.07.2013 - 22:32

Вот прямо так и писать. Что тебя смущает то? Скобки cc отлично понимает

Хм, значит то я где-то затупил. Просто выдавало ошибку когда я так писал.
shell[paste][/paste]run("prog","arg1","arg2")
Ага, спасибо. Когда закончится вызываемая программа, то выполнение вернется обратно к "родительской" программе? И можно ли вернуть значение из "дочерной" программы? То есть что-то типо return?
UPD: Не пойму почему этот код не работает, я в событиях вобще не шарю, может кто растолкует?
Скрытый текст


#2223 Apokalypsys

Apokalypsys

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

  • Пользователи
  • Сообщений: 183

Написал 06.07.2013 - 01:25

1. Да, управление вернется родительской программе. 2. Да, можно вернуть. Я уже писал где-то раньше как. 3. Если не учитывать разного бреда, то не работает, наверное, из-за
key=os[paste][/paste]pullEvent("key")  if key == "key203" then x=x-1 end
надо
key, p1=os[paste][/paste]pullEvent("key")  if key == "key" and p1 == "203" then x=x-1 end
UPD. Вот

#2224 Ukrainian

Ukrainian

    Странник

  • Пользователи
  • Сообщений: 83

Написал 06.07.2013 - 01:52

3. Если не учитывать разного бреда, то не работает, наверное, из-за

То есть функция возвращает два аргумента, даже если указан фильтр? Зачем, ведь key == "key" всегда будет тру если установлен фильтр "key"?

Вот тут объяснял как делать вычислительный сервер с реднет, там как раз запуск программы и вывод.

Интересно, сейчас допишу свою функцию, и почитаю.

#2225 Apokalypsys

Apokalypsys

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

  • Пользователи
  • Сообщений: 183

Написал 06.07.2013 - 02:06

os[paste][/paste]pullEvent("key")
конкретно возвращает 2 значения, ивент "key" и номер кнопки.

#2226 Ukrainian

Ukrainian

    Странник

  • Пользователи
  • Сообщений: 83

Написал 06.07.2013 - 03:38

os[paste][/paste]pullEvent("key")
конкретно возвращает 2 значения, ивент "key" и номер кнопки.

Да я понял, я про то что это не логично, возвращать первый аргумент если есть фильтр. Так как:

key == "key" всегда будет тру если установлен фильтр "key"



#2227 Sega

Sega

    Странник

  • Пользователи
  • Сообщений: 20

Написал 06.07.2013 - 18:14

Можно ли как-нибудь перекопировать код черепахи на сервер, не набирая его в ручную. Для одиночной игры понятно, а вот как для сервера скопировать?

#2228 Maltor

Maltor

    Странник

  • Пользователи
  • Сообщений: 2

Написал 06.07.2013 - 18:19

Кто знает, в чём проблема: собрал сервер на версии 1.4.7, чтобы поиграть с другом. Поставил, кроме всех прочих модов, CC 1.5 Когда скрафтил черепашку, оказалось, что она не работает, выводит просто чёрный экран без надписей. Хотя в одиночке всё прекрасно работает. Сервер с клиентом собирал параллельно, проблем с конфигами не должно быть.

#2229 Sega

Sega

    Странник

  • Пользователи
  • Сообщений: 20

Написал 06.07.2013 - 18:44

Спасибо, уже разобрался. Можно через pastebin

#2230 Ukrainian

Ukrainian

    Странник

  • Пользователи
  • Сообщений: 83

Написал 07.07.2013 - 02:06

Не пойму, почему компилятор выдает '' expected при виде моей метки?
::continue::
UPD: А на goto пишет: '=' expected.
goto continue


#2231 Apokalypsys

Apokalypsys

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

  • Пользователи
  • Сообщений: 183

Написал 07.07.2013 - 02:32

Потому что в Lua нет goto и меток.P.S. <censored>, какой компилятор?

#2232 Ukrainian

Ukrainian

    Странник

  • Пользователи
  • Сообщений: 83

Написал 07.07.2013 - 02:35

Потому что в Lua нет goto и меток.

http://lua-users.org...ructureTutorial >>

Many other languages have a continue statement that skips the rest of the current iteration of the innermost loop. In Lua 5.2, this can be imitated using goto:

> for i = 1, 10 do>> if i>3 and i<6 then goto continue end>> print(i)>> ::continue:: -- a name surrounded in :: :: is a goto label>> end

А вот там же статья по ним: http://lua-users.org...i/GotoStatement

#2233 Apokalypsys

Apokalypsys

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

  • Пользователи
  • Сообщений: 183

Написал 07.07.2013 - 02:37

Введи в CC
print(_VERSION)
и сравни с той, что там.

#2234 Ukrainian

Ukrainian

    Странник

  • Пользователи
  • Сообщений: 83

Написал 07.07.2013 - 02:44

Введи в CC

print(_VERSION)
и сравни с той, что там.

Чёрт 2.0.3, когда для меток нужна 5.2.0
Это ненормально...
Про continue я могу забыть?
UPD: Еще возник вопрос, есть ли функция для разрезание строки на элементы по разделителю? Что-то типо:
split("I am string"," ")
> I
> am
> string

#2235 Apokalypsys

Apokalypsys

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

  • Пользователи
  • Сообщений: 183

Написал 07.07.2013 - 02:57

Про continue я могу забыть?

Ну, конечно же нет! Пробуй, пробуй почаще. Рано или поздно обязательно получиться!

Еще возник вопрос, есть ли функция для разрезание строки на элементы по разделителю?

Да, есть.

#2236 Ukrainian

Ukrainian

    Странник

  • Пользователи
  • Сообщений: 83

Написал 07.07.2013 - 03:11

Ну, конечно же нет! Пробуй, пробуй почаще. Рано или поздно обязательно получиться!

Думаю если continue нету, то его нету.

Да, есть.

Подскажешь как она называется?..

#2237 Apokalypsys

Apokalypsys

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

  • Пользователи
  • Сообщений: 183

Написал 07.07.2013 - 03:45

Надеюсь угадал, что тебе надо.
function split(_sSrc, _sSpliter, _nMode)	if _nMode == 0 then		local _tSplits, nCount = {}, 1		for _sSplit in string[paste][/paste]gmatch(_sSrc, _sSpliter) do			_tSplits[nCount] = _sSplit			nCount = nCount + 1		end		return _tSplits	elseif _nMode == 1 then		return coroutine[paste][/paste]wrap(			function()				for _s in string[paste][/paste]gmatch(_sSrc, _sSpliter) do					coroutine[paste][/paste]yield(_s)				end				return nil			end		)	end		return nilend
t = split("a b c", "%a+", 0)print(t[1])print(t[2])print(t[3])
>a >b >c
for s in split("1a 2bc 3def 4ghij", "[%a%d]+", 1 ) do    print(s)end
>1a >2bc >3def >4ghij Если что-то надо объяснить или переписать - говори, мне не влом.

#2238 Ukrainian

Ukrainian

    Странник

  • Пользователи
  • Сообщений: 83

Написал 07.07.2013 - 04:52

Надеюсь угадал, что тебе надо.

То что нужно!
local _tSplits, nCount = {}, 1      for _sSplit in string[paste][/paste]gmatch(_sSrc, _sSpliter) do         _tSplits[nCount] = _sSplit         nCount = nCount + 1      end      return _tSplits
Это понятно, возвращает массив элементов.
return coroutine[paste][/paste]wrap(         function()            for _s in string[paste][/paste]gmatch(_sSrc, _sSpliter) do               coroutine[paste][/paste]yield(_s)            end            return nil         end      )
Это как работает? Я просто не знаю что такое coroutine.
for s in split("1a 2bc 3def 4ghij", "[%a%d]+", 1 ) do    print(s)end
Похоже оно работает так как если вызвать напрямую string.gmatch?
UPD: И что это за ключи: [%a%d]+? Они определяют по какому символу разделять?

#2239 Apokalypsys

Apokalypsys

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

  • Пользователи
  • Сообщений: 183

Написал 07.07.2013 - 13:11

И что это за ключи: [%a%d]+? Они определяют по какому символу разделять?

Это регулярные выражения. Regex. Мржешь почитать про синтаксис в интернет.

Похоже оно работает так как если вызвать напрямую string.gmatch?

Ага, прикольно получилось :D.

И что это за ключи: [%a%d]+?

%a - все буквы алфавита. %d - все цифры. + - неограниченное количество знаков. [] - любое из того, что в скобках.

#2240 Kaerius

Kaerius

    Странник

  • Пользователи
  • Сообщений: 17

Написал 07.07.2013 - 20:45

Нужна помощь. Пытаю OpenCCSensors. Программа должна, открывать дверь если в зоне есть разрешены пользователи. сенсор и карточка на игроков mk1 Вот код, но он не хочет работать, уже устал с ним бороться.
sideRedstone="left"sideSensor="right"nameD = {"test1", "test2"}os[paste][/paste]loadAPI("ocs/apis/sensor")local nameT = {}rs[paste][/paste]setOutput(sideRedstone, true)function prov(x1,x2) --сверяем два массива, до первого совпадения[paste][/paste] for y1=1, #x1 do  for y2=1, #x2 do   if x1[y1] == x2[y2] then    return true   end  end end  endwhile true do --получаем данные с сенсора и засовываем в массив local targets = sensor[paste][/paste]wrap(sideSensor)[paste][/paste]getTargets() local s = 1 for name in pairs(targets) do  nameT[s] = tostring(name)  s = s + 1 end if prov(nameD,nameT) then --если проверка прошла открываем двери[paste][/paste]  rs[paste][/paste]setOutput(sideRedstone, false)  slepp(1) else  rs[paste][/paste]setOutput(sideRedstone, true)end



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных