|
|
|
Помогите освоить LUA |
|
|
sutra |
1.8.2019, 2:06
|
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007
|
Дарк, коллеги, спасибо за то, что посоветовали перейти на LUA. Подведя итоги за те 6 месяцев моих мытарств изучения языка (точнее его запрограммированных глюков), результат таков - всё просто летает, любой анализ, любой сложности, выполняется на УРА! Почитал комменты (не все), многие так и не поняли чего они не поняли, хотя вся основа была разжёвана. Практически не особо правил свои функции поиска (правил чисто ляпы и косметику, сама концепция неизменна и эффективна), но всё работает как часы. При правильном алгоритмировании, время поиска даже достаточно сложных и объёмных комбинаций объектов поиска, у меня не превышает 2-5 сотых секунды, при этом минимум 90% скорости кушает getimage. От него и надо плясать. Нашёл немало глюков в Пилоте, но как обычно обошёл их своими "колхозными" методами, информировать о них никого не стал, тем более, что Кнайту это всё наверное надоело (мне бы тоже надоело). В общем, при желании, на текущей версии Пилота, реализовать можно практически любую задачу. Во всяком случае получается искать ВСЁ что требуется, за требуемый интервал времени. Ещё раз всем спасибо!
|
|
|
|
WKnight |
2.8.2019, 0:41
|
Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006 Группа: Пользователи Наличность: 0
Пользователь №: 4.688
|
Я рад, что плоды моего труда приносят пользу. В моей программе полно глюков, поскольку я самоучка, но мне очень нравится творить хотя бы таким образом. На этом форуме точно есть люди (постоянные посетители), которые знают в программировании гораздо больше меня, и полно людей, которые знают поведение моей программы гораздо лучше меня. Но я жид (еврей), сцука русский жид... поэтому я пока пишу один. И я всячески приветствую расширение функционала, в том числе посредством плагинов, луа, иным образом... Если вы нашли обход какого то глюка - поделитесь, люди вам скажут спасибо, а я направлю свои усилия на исправление другого надоедливого глюка, или расширение функционала. Я вам всем безмерно благодарен за поддержку, без которой скорее всего вы сидели бы на других эмуляторах, эта программа закончилась бы на версии 0.96, а я тупо гамил бы в очередную онлайн поделку (не факт, что онлайн, но не суть).
ps: крик души. пьян. воспринимать официально...
|
|
|
|
DarkMaster |
10.5.2023, 15:55
|
Модератор UOPilot
Сообщений: 9.566
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 28525
Пользователь №: 11.279
|
Код --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 = homepath() -- Копируем адрес директории с пилотом для -- преобразования абсолютного в относительный. -- Очень сильно экономит такты.
local log_orig = log
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
if string.match(result, [[\luaPlugins\mydbg.lua]]) then return end
log_orig(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
local log_debug = function(...) log_orig(...)
if dbg.file.enable == 1 then local params = {...} for i = 1, #params do dbg.file.handle:write(tostring(params[i])) if i < #params then dbg.file.handle:write(" ") end end dbg.file.handle:write("\r\n") dbg.file.handle:flush() end 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 log_orig = log log = log_debug else log "disable debug" debug.sethook () log = log_orig end end
return dbg
сохранить в файл mydbg.lua и поместить в папку рядом спилотом с названием lua_plugins. В вашем скрипте добавить в шапку: local dbg = require[[lua_plugins\mydbg]] dbg.enable(1)
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|