|
Вопрос по массивам и окнам |
|
|
sel |
13.11.2018, 15:08
|
 
Neophyte
Сообщений: 32
Регистрация: 4.7.2018 Группа: Пользователи Наличность: 0
Пользователь №: 18.986
Возраст: 27

|
Вопрос в следующем, мне необходимо отследить количество запущенных окон игры, скрипт у меня ходит между окнами и выполняет разные задачи, ходит в цикле for.
Выглядит примерно так:
set %handle FindWindow ("Игра") set #f 1 while (#f = 1) for #i 1 size(%handle) ... скрипт ... end_for end_while
Иногда случается так, что окно с игрой крашится с ошибкой, и скрипт заводит обратно вылетевшее окно с новым хендлом, в этом основная загвоздка, если бы не это обстоятельство то я бы мог записывать в массив %handle [#i 3] допустим цифру 0 если окно вылетело и проводить в цикле ещё один цикл for который бы складывал значения в столбце %handle [#i 3] и если оно будет равняться 0 то скрипт начнёт заводить все окна, но из за краша окон добавляется новая строчка в массиве с новым хендлом.
Задача - определить, что вылетели все окна игры, есть идеи как это можно сделать? Заранее спасибо за ответ.
p.s. определить какое окно вылетело с ошибкой трудно, может вылететь абсолютно любое, всё что есть это хендл окна.
|
|
|
|
|
  |
Ответов
DarkMaster |
23.12.2018, 5:36
|
          
Модератор UOPilot
Сообщений: 9.743
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29658
Пользователь №: 11.279

|
tableToFile.lua
Код local write, writeIndent, writers, refCount;
local persistence = { save = function (path, ...) local file, e = io.open(path, "w"); if not file then return error(e); end local n = select("#", ...); -- Count references local objRefCount = {}; -- Stores reference that will be exported for i = 1, n do refCount(objRefCount, (select(i,...))); end; -- Export Objects with more than one ref and assign name -- First, create empty tables for each local objRefNames = {}; local objRefIdx = 0; file:write("-- Persistent Data\n"); file:write("local multiRefObjects = {\n"); for obj, count in pairs(objRefCount) do if count > 1 then objRefIdx = objRefIdx + 1; objRefNames[obj] = objRefIdx; file:write("{};"); -- table objRefIdx end; end; file:write("\n} -- multiRefObjects\n"); -- Then fill them (this requires all empty multiRefObjects to exist) for obj, idx in pairs(objRefNames) do for k, v in pairs(obj) do file:write("multiRefObjects["..idx.."]["); write(file, k, 0, objRefNames); file:write("] = "); write(file, v, 0, objRefNames); file:write(";\n"); end; end; -- Create the remaining objects for i = 1, n do file:write("local ".."obj"..i.." = "); write(file, (select(i,...)), 0, objRefNames); file:write("\n"); end -- Return them if n > 0 then file:write("return obj1"); for i = 2, n do file:write(" ,obj"..i); end; file:write("\n"); else file:write("return\n"); end; if type(path) == "string" then file:close(); end; end;
load = function (path) local f, e; if type(path) == "string" then f, e = loadfile(path); else f, e = path:read('*a') end if f then return f(); else return nil, e; end; end; }
-- Private methods
-- write thing (dispatcher) write = function (file, item, level, objRefNames) writers[type(item)](file, item, level, objRefNames); end;
-- write indent writeIndent = function (file, level) for i = 1, level do file:write("\t"); end; end;
-- recursively count references refCount = function (objRefCount, item) -- only count reference types (tables) if type(item) == "table" then -- Increase ref count if objRefCount[item] then objRefCount[item] = objRefCount[item] + 1; else objRefCount[item] = 1; -- If first encounter, traverse for k, v in pairs(item) do refCount(objRefCount, k); refCount(objRefCount, v); end; end; end; end;
-- Format items for the purpose of restoring writers = { ["nil"] = function (file, item) file:write("nil"); end; ["number"] = function (file, item) file:write(tostring(item)); end; ["string"] = function (file, item) file:write(string.format("%q", item)); end; ["boolean"] = function (file, item) if item then file:write("true"); else file:write("false"); end end; ["table"] = function (file, item, level, objRefNames) local refIdx = objRefNames[item]; if refIdx then -- Table with multiple references file:write("multiRefObjects["..refIdx.."]"); else -- Single use table file:write("{\n"); for k, v in pairs(item) do writeIndent(file, level+1); file:write("["); write(file, k, level+1, objRefNames); file:write("] = "); write(file, v, level+1, objRefNames); file:write(";\n"); end writeIndent(file, level); file:write("}"); end; end; ["function"] = function (file, item) -- Does only work for "normal" functions, not those -- with upvalues or c functions local dInfo = debug.getinfo(item, "uS"); if dInfo.nups > 0 then file:write("nil --[[functions with upvalue not supported]]"); elseif dInfo.what ~= "Lua" then file:write("nil --[[non-lua function not supported]]"); else local r, s = pcall(string.dump,item); if r then file:write(string.format("loadstring(%q)", s)); else file:write("nil --[[function could not be dumped]]"); end end end; ["thread"] = function (file, item) file:write("nil --[[thread]]\n"); end; ["userdata"] = function (file, item) file:write("nil --[[userdata]]\n"); end; }
return persistence
Код --lua -- ПУТЬ ПОПРАВЬТЕ -- ПУТЬ ПОПРАВЬТЕ -- ПУТЬ ПОПРАВЬТЕ local tableToFile = require[[luaPlugins\tableToFile]] local a = {123, "HRt", 67} local b = {"BRS", "AR", "nnfw"} local c = {Raad=35, ar=89} tableToFile.save ("saved.txt", a,b,c) local d, e, f = tableToFile.load ("saved.txt") Сохраняет в виде валидного lua кода (функции). Что позволяет по сути использовать стандартный: local d, e, f = loadfile ("saved.txt")() Обратите внимание на вторую пару скобок. loadfile загружает функцию, а не значения, мы ставим вторую пару скобок и эта функция выполняется и возвращает уже непосредственно значения. мля. спать надо. пост выше не по теме) ну пусть висить - вообще полезный))
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Сообщений в этой теме
sel Вопрос по массивам и окнам 13.11.2018, 15:08 sutra
Эту строку помести в while если тормозов не будет... 13.11.2018, 15:20 sutra После анализа массива ненужный элемент можно удали... 13.11.2018, 17:46 sel Есть где то примеры анализа массивов?
Массив приме... 13.11.2018, 18:05 sutra Я не совсем понял что именно надо. Смысл примерно ... 13.11.2018, 18:27 sutra Можно отсортировать оба массива, тогда наверное ещ... 13.11.2018, 18:55 sel
Можно отсортировать оба массива, тогда наверное е... 13.11.2018, 19:39 DarkMaster
Его выдает винда при создании окна и он никак не ... 13.11.2018, 20:17 sutra
Опиши подробнее. Скрипт заводит или игра сама соз... 13.11.2018, 23:00 sutra
Ты можешь присвоить окну свой порядковый номер se... 13.11.2018, 23:11 cirus
Скобки не нужны.
Тоже самое:
set %handleold %han... 14.11.2018, 2:23 sel Придумал более интересный способ определения вылет... 15.12.2018, 1:34 cirus
Откуда это?
Запустить любое количество окон, в и... 15.12.2018, 2:40 sutra Видимо проблема определения вылетевших окон не реш... 15.12.2018, 4:26 sel В общем написал преемлемый для меня вариант(есть с... 17.12.2018, 16:16 sutra Количество окон игры должно быть постоянным? или м... 15.12.2018, 4:59 sutra Про ошибку конкретного примера кода уже более опыт... 15.12.2018, 5:14 DarkMaster
раньше пилотовский синтаксис отказывался восприни... 15.12.2018, 5:47 sutra Ну на 100% не вникал, но логика правильная, если в... 17.12.2018, 18:22 sel Итак, у меня новый затуп, пытаюсь красиво сохранят... 23.12.2018, 4:28 cirus
Дописывать пробелы в конец строки, чтобы все были... 23.12.2018, 5:39 sutra
Я бы порекомендовал использовать табуляцию. Прост... 23.12.2018, 13:10 DarkMaster
Проблема в том, что текстовые редакторы табуляцию... 23.12.2018, 13:41 sutra Да вариантов полно, табуляция - это просто выравни... 23.12.2018, 14:08 sutra Если конечно установлен эксель. Выбираешь вкладку ... 23.12.2018, 14:33 sel Ииии, мне снова нужна ваша помощь друзья:)
Проблем... 29.12.2018, 0:48 cirus
В папке с пилотом Scripts\Backup. Ищите рабо... 29.12.2018, 1:22 sutra Ну если быстро (чисто для Вашего случая) не вникая... 29.12.2018, 3:29 sel По прежнему сталкиваюсь всё с той же проблемой, ес... 28.2.2019, 0:26 cirus
Возможно в этом проблема. Попробуйте не использов... 28.2.2019, 1:34 sutra Тоже хотел сказать про это, но и это не главное. И... 28.2.2019, 1:55 sel
Я вроде даже где-то 100% рабочий пример давал с ... 28.2.2019, 2:58 sutra Подпрограмма в Пилоте - это собственно goto на мет... 28.2.2019, 2:27 sutra findwindow ищет окна в том порядке, в котором они ... 28.2.2019, 2:47 cirus
2гб и вылет. 28.2.2019, 3:04 sutra Ну хоть что-то, я тоже думал на эту тему. Всё-таки... 28.2.2019, 3:32 sel
Ну хоть что-то, я тоже думал на эту тему. Всё-так... 5.3.2019, 10:10 sutra Голову на отсечение конечно давать не буду. Но иск... 28.2.2019, 3:42 sutra Вот без всякого хвастовства говорю (хотя гордость ... 28.2.2019, 3:55 DarkMaster
gosub работает полностью корректно с циклами при ... 28.2.2019, 14:00 sel Возникло несколько вопросов:
1. Можно ли команду l... 4.5.2019, 13:45 cirus
Нет, только txt. 4.5.2019, 14:06
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|