|
|
  |
Новая Версия Uopilot v.2.40 (05.11.2017), Официальный сайт. Скачать. Последняя версия. |
|
|
| DarkMaster |
30.11.2018, 0:11
|
          
Модератор UOPilot
Сообщений: 9.776
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 30125
Пользователь №: 11.279

|
Код --lua send217() end_script () уже плохеет. Не вылизано, может есть огрехи, но оно работает. По крайней мере у меня настольный инструмент. Предлагаю включить в пилот, со временем может допилится до чего-то более красивого. На данный момент технически не имею возможности выдергивать значения передаваемые в функцию. С переменными можно исключительно через Ж выдернуть значения по сути написав собственный парсер, а вот с внешних функций уже увы не получится без использования апи на стороне пилота. Код --lua --log = print
do local tab = "" local deep = 0 function table.show(t, comment) -- Пишем в лог комментарий. deep = deep + 1 -- Уровень вложенности вызовов функции. --log(comment .. commentSended .. deep) if comment ~= nil and deep == 1 then log(comment) end
if type(t) == "nil" then log("table is nil") elseif type(t) == "string" then log('table is string: "'..t..'"') elseif type(t) == "number" then log('table is number: '..t) elseif type(t) == "table" then local elementsInTable = 0 for k,v in pairs(t) do if type (v) == "table" then if type(k) == "string" then log(tab..'table: "'..k..'"') else log(tab..'table: '..k) end tab = tab .. " " table.show(v) tab = string.sub(tab, 1, -5) elementsInTable = elementsInTable + 1 else elementsInTable = elementsInTable + 1 if type(v) == "string" then v = '"'..v..'"' end if type(v) == "boolean" then v = '"'.. tostring(v)..'"' end if type(v) == "function" then v = '"'.. tostring(v) ..'"' end if type(k) == "string" then k = '"'..k..'"' end log(tab..""..k)--.." = "..v) end end if elementsInTable == 0 then log("table is empty") end else log('table is unknow data type') end -- Пишем в лог комментарий. deep = deep - 1 -- Уровень вложенности вызовов функции. end end
local dbg = {} dbg.trace = 1 -- Отображение стека dbg.line = 1 -- Отображение номеров строк dbg.code = 1 -- Отображение исходного кода dbg.source = 1 -- Отображение источника кода(адрес файла, строка и т.д.) dbg.source_abs = 0 -- Абсолютные адреса файлов. dbg.tab = 75 -- Выравнивание исходного кода в символах. -- стек выравнивание код --(213)main-> mycall() --(213)main->(209)mycall-> file_echo() -- стек выравнивание код dbg.file = {} -- Настройки файла лога dbg.file.enable = 1 -- Включить логирование в файл dbg.file.path = "lua_log.txt" -- Путь файла лога dbg.file.append = 0 -- Дописывать лог (не удалять старый) dbg.file.handle = nil -- Хендл файла dbg.buffer = {} -- Буфер с файлами скриптов.
dbg.homepath = [[i:\!sandboxie\wxLua\drive\C\LuaJIT-2.0.5 x86 bin_2\]] -- Копируем адрес директории с пилотом для -- преобразования абсолютного в относительный. -- Очень сильно экономит такты.
if dbg.file.enable == 1 then if dbg.file.append == 1 then dbg.file.handle = io.open("lua_log.txt", "a+b") else dbg.file.handle = io.open("lua_log.txt", "wb") -- Стираем файл. -- dbg.file.handle:close() -- Стираем файл. -- dbg.file.handle = io.open("lua_log.txt", "a+b") end end
function dbg.func() local result = "" local short_src = "" local source_line = "" local source_is_file = nil
local info = debug.getinfo(2,'nSl') -- table.show(info) if info then -- Включено логгирование строк исходника. -- Только вычлнение строки, -- конкатенция после получения стека. if dbg.code == 1 then local source_line_n = info.currentline local line_pos = 0
-- Если источник кода внешний файл, то -- подгружаем файл в источник вместо адреса файла. if string.sub(info.source,1,1) == "@" then source_is_file = true local source_file = io.open(string.sub(info.source, 2), "r") info.source = source_file:read("*a") source_file:close() end
-- Находим строку с кодом в исходнике. for i=1, source_line_n - 1 do --log("i: "..i.."source_line_n: "..source_line_n - 1) line_pos = string.find(info.source, "\n", line_pos +1) end local line_end = string.find(info.source, "\n", line_pos +1) source_line = string.sub(info.source, line_pos + 1, line_end - 1) -- result = result.."\t"..source_line end
-- Получаем стек, пути. if dbg.trace == 1 then for i=3, 100 do if info then if not info.name then info.name = info.what end -- Добавление источника. if dbg.source == 1 then if short_src ~= info.short_src then if i > 3 then -- Преобразуем абсолютный путь в отностиельный. if source_is_file and dbg.source_abs == 0 then local prefix = string.sub(short_src, 1, #dbg.homepath) if prefix == dbg.homepath then j=i short_src = string.sub(short_src, #dbg.homepath + 1) end end result = '"'..short_src..'"->'..result end short_src = info.short_src end end -- Добавление стека result = "("..info.currentline -1 ..")"..info.name .. "->" .. result else break end info = debug.getinfo(i,'nSl') end end else return end -- Добавляем строку исходника. if dbg.code == 1 and dbg.code == 1 then if dbg.trace == 1 then result = result..string.rep(" ", dbg.tab-#result)..source_line else result = tostring(info.currentline) result = result..string.rep(" ", 5-#result).."-> "..source_line end end
log(result)
if string.sub(result, -1) == "\r" then result = result .. "\n" else result = result .. "\r\n" end
if dbg.file.enable == 1 then dbg.file.handle:write(result) dbg.file.handle:flush() end -- log(source_line) end
function dbg.enable (state) -- Вкл|выкл лога. nil, false, 0 - выключают, любые другие значения включают. if state and state ~= 0 then if dbg.line == 1 or dbg.trace == 1 then debug.sethook (dbg.func, "l") end else log "disable debug" debug.sethook () end end
return dbg
По сути аналог log commands
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____ Контакт актуален, подпись актуальна.
|
|
|
|
|
|
| WKnight |
7.12.2018, 13:19
|
       
Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006 Группа: Пользователи Наличность: 0
Пользователь №: 4.688

|
Unstable 07.12.2018 Build 016.17
Добавил "*.lua" в маску по умолчанию, в диалоги открытия\сохранения скриптов.
Исправил галочку "Добавлять пробелы", слегка переделал алгоритм.
Исправил 'dir' в Lua. Если ничего не найдено, то возвращает "nil", а не пустую таблицу.
В хелп с Wiki, который вызывается по "F1" или по ПКМ на операторе в скрипте, добавил команды Lua. Какую справку показывать, Lua или обычную, определяется по предшествующему комментарию.
В "Перекачать всё с Wiki" добавил скачивание Lua вариантов команд.
Исправил эксепшен при использовании 'send' без параметров.
Убрал зацикливание одинокого скрипта Lua без признака конца скрипта "--endlua".
Добавил редактор "Подсветки синтаксиса" в меню "Настройки".
Исправил ошибку "EConvertError '^xx'", где "хх" номер скрипта, иногда возникающую при выполнении процедур.
|
|
|
|
|
|
| sel |
7.12.2018, 23:09
|
 
Neophyte
Сообщений: 32
Регистрация: 4.7.2018 Группа: Пользователи Наличность: 0
Пользователь №: 18.986
Возраст: 27

|
Цитата(WKnight @ 7.12.2018, 23:39)  Мне нужен пример, для воспроизведения ошибки.
Попробуйте запустить этот скрипт без запущенного калькулятора. Код call test
proc test set #handleWin findWindow (Калькулятор) set workwindow #handleWin end_proc end_script
|
|
|
|
|
|
| sutra |
8.12.2018, 0:52
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата Дело в том, что раньше такого не было, а сейчас да, вешает наглухо Ну так и откажись от него, он живёт своей жизнью, никаких преимуществ не даёт, наоборот - одни проблемы. Используй gosub, просто, эффективно и понятно. А Кнайт пусть репу чешет, как решать сию проблему. Вам спасибо, запесплатно выявили ошибку. Цитата Да оператор то как раз очень нужный Да нафиг он нужен. Ну своё пространство - это суперпроблема для Пилота? Ты то давно в lua. Цитата Да оператор то как раз очень нужный Настолько нужный, что с версии 2.15 "чудно работал".
|
|
|
|
|
|
| DarkMaster |
8.12.2018, 2:38
|
          
Модератор UOPilot
Сообщений: 9.776
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 30125
Пользователь №: 11.279

|
Цитата Ну своё пространство - это суперпроблема для Пилота? Да, я уже писал об этом (IMG: style_emoticons/default/smile.gif) Цитата Ты то давно в lua. Ну поэтому и в луа, что в луа нет этой проблемы. Для старого синтаксиса важно. По сути я старый синтаксис рассматриваю сейчас в первую очередь, как совместимость. По большому счету нужно на lua пересаживать народ, а это тяжело. В первую очередь потому, что это не язык по умолчанию и его еще нужно включить и выглядит он сейчас больше, как пасхалка. Во вторых вика ну очень хорошо написана, но написана она не под луа и ее нужно редактировать и редактировать много. Да правки там символические, но для людей неразибрающихся они нужны и сильно. Сообщение отредактировал DarkMaster - 8.12.2018, 2:38
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____ Контакт актуален, подпись актуальна.
|
|
|
|
|
|
| sutra |
8.12.2018, 2:54
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата но для людей неразибрающихся они нужны и сильно. Всё так, ты как всегда прав. Ну со временем всё будет как надо. Ещё раз спасибо Кнайту, высказывать пожелания и критиковать легко, а вот реально что-то сделать, не так просто. Лично я до сих пор, все кусочки кода методом тыка сначала пробую на работоспособность, потом тестирую на скорость и только потом внедряю в рабочий скрипт. Процесс небыстрый, но потихоньку продвигаюсь. Проектирую новый код на перспективу, да, медленно, но сомнений нет, всё будет переведено на lua, и как и обещал, прибью даже блоху, в любой координате, даже если она появится на миг.
|
|
|
|
|
|
| sutra |
10.12.2018, 10:18
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата ctrl-Y отвалился. Конечно это неплохая вещь. Однако, как говорят в народе, на скорость не влияет! У меня с давних пор выработана привычка, если придумал что-то супер эксклюзивное, немедленно сохраняй. Если нацарапал абзац - сохраняй. Раньше бесперебойников не было. Ну а бекап вроде давно уже стандарт, в Пилоте слава богу с этим проблем нет. Ну а если по собственному недосмотру удалил какую-нить хрень, ну откат то работает, остальное господа - излишества, заставляющие мозг окончательно забыть про его предназначение. Я вообще по привычке частенько в FARе всё делаю, там нет проблем, там можно всё, хоть вертикальными блоками таскай, сдвиги влево вправо и redo работает, правда не CTRL-Y. И подсветка меня устраивает, сразу показывает какой end к чему относится.
|
|
|
|
|
|
| WKnight |
10.12.2018, 11:25
|
       
Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006 Группа: Пользователи Наличность: 0
Пользователь №: 4.688

|
|
|
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|