Здравствуйте, гость ( Вход | Регистрация )

> Вопрос по массивам и окнам
sel
сообщение 13.11.2018, 15:08
Сообщение #1


**

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. определить какое окно вылетело с ошибкой трудно, может вылететь абсолютно любое, всё что есть это хендл окна.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
DarkMaster
сообщение 23.12.2018, 5:36
Сообщение #2


***********

Модератор 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____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
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

 

- Текстовая версия | Версия для КПК Сейчас: 10.7.2025, 11:53
Designed by Nickostyle