RakBot lua

FakeSince

Активный
Автор темы
245
55
Версия MoonLoader
.026-beta
Взял с ракхелпера вот такую функцию:
Lua:
function getAllBotInfo()
    local path = getRakBotPath() .. "\\scripts\\config";
    local res = findDirectoryFile(path, "%a+%d+%.json");

    if res then
        local tab = {};

        for i = 1, #res do
            local jsonString = readFile(path .. "\\" .. res[i]);
            if jsonString then
                tab[#tab + 1] = json.decode(jsonString);
            end
        end

        local title = [[
[RakHelper] Информация о запущенных ботах:
Ник(ид)                    Лвл   Здоровье Деньги    Статус           Афк Подключен Заспавнен Сервер
]];
        local text = "";

        for i = 1, #tab do
            local index = tab[i];

            local time = index.time;
            if os.time() - time < 60 then
                local nick = formationStringToColumn(index.nick .. "(" .. index.lvl .. ")", 25);
                local lvl = formationStringToColumn(index.lvl, 4);
                local health = formationStringToColumn(index.health, 7);
                local money = formationStringToColumn(index.money, 8);
                local status = formationStringToColumn(index.status, 15);
                local afk = formationStringToColumn(index.afk, 2);
                local connect = formationStringToColumn(index.connect, 8);
                local spawn = formationStringToColumn(index.spawn, 8);
                local server = index.server;

                text = text .. ("%s %s %s %s %s %s %s %s %s\n"):format(nick, lvl, health, money, status, afk, connect, spawn, server);
            end
        end

        printLog(title .. text);
    end
end
Меня интересует вывод серверов: 1654846557264.png
Как сделать переменную, в которой хранились бы названия всех серверов аризоны, после чего можно было бы получать названия серверов через local server = index.server, и сравнивать, если сервер есть в списке - не выводить его, если сервера нет - вывести в чат?
 
Решение
Поставил твой скрипт, вот такая ошибка:
[11:06:17] [ERROR] Ошибка скрипта "RakHelper.lua": C:\Users\user\Desktop\RakBot\scripts\RakHelper.lua:218: attempt to index a nil value
[11:06:17] [ERROR] stack traceback:
[11:06:17] [ERROR] C:\Users\user\Desktop\RakBot\scripts\RakHelper.lua:218: in function 'func'
[11:06:17] [ERROR] C:\Users\user\Desktop\RakBot\scripts\RakHelper.lua:286: in function <C:\Users\BanditAzure\Desktop\RakBot\scripts\RakHelper.lua:278>
Т.к структура таблицы поменялась, тебе нужно удалить все временные файлы в папке "RakBot-0.8.2.1\scripts\config" RakHelper....json. Они удаляются сами, после выхода ракбота, но если они остались - удали.
Так же может мешать оригинальный РакХелпер, ведь скрипты юзают один файл.
Короче...

The Spark

Известный
653
671
Если ты собираешься юзать rakhelper и из него брать инфу, то нужно добавить в функцию getBotInfoTab получение ипа
Lua:
function getBotInfoTab()
    local nick = getNickName();
    local id = tostring(getBotId());
    local lvl = tostring(getScore());
    local health = tostring(getHealth());
    local money = tostring(getMoney());
    local time = os.time();

    local statusTab = {
        [0] = "Подключение",
        [1] = "Пешеход",
        [2] = "Водитель",
        [3] = "Пассажир",
        [4] = "Наблюдатель",
        [5] = "Садится в машину";
    }
    local status = statusTab[getBotState()] or getBotState();

    local afk = os.time() - afkTime >= 3 and "Да" or "Нет";
    local connect = isBotConnected() and "Да" or "Нет";
    local spawn = isBotSpawned() and "Да" or "Нет";
    local server = getServerName();
    local serverIP = getServerAddress();

    return {
        time = time,
        nick = nick,
        id = id,
        lvl = lvl,
        health = health,
        money = money,
        status = status,
        afk = afk,
        connect = connect,
        spawn = spawn,
        serverIP = serverIP,
        server = server;
    }
end

А в своей фунции getAllBotInfo сделать:
Lua:
function getAllBotInfo()
    local path = getRakBotPath() .. "\\scripts\\config";
    local res = findDirectoryFile(path, "%a+%d+%.json");

    if res then
        local tab = {};

        for i = 1, #res do
            local jsonString = readFile(path .. "\\" .. res[i]);
            if jsonString then
                tab[#tab + 1] = json.decode(jsonString);
            end
        end
       
        -- не все ипы, добавь сам
        local arizonaServerIpTable = {
            ["185.169.134.45:7777"] = {'Brainburg', false},
            ["185.169.134.44:7777"] = {'Chandler', false},
            ["80.66.82.190:7777"] = {'Show-low', false},
            ["80.66.82.188:7777"] = {'Case grande', false},
            ["80.66.82.191:7777"] = {'Gilbert', false},
            ["185.169.134.171:7777"] = {'Glendale', false},
            ["185.169.134.172:7777"] = {'Kingman', false},
            ["185.169.134.59:7777"] = {'Mesa', false},
            ["185.169.134.174:7777"] = {'Payson', false},
            ["185.169.134.3:7777"] = {'Phoenix', false},
            ["185.169.134.166:7777"] = {'Prescott', false},
            ["185.169.134.61:7777"] = {'RedRock', false},
            ["185.169.134.5:7777"] = {'SaintRose', false},
            ["185.169.134.43:7777"] = {'Scottdale', false},
            ["185.169.134.109:7777"] = {'Surprise', false},
            ["80.66.82.168:7777"] = {'Page', false},
            ["185.169.134.4:7777"] = {'Tucson', false},
            ["185.169.134.173:7777"] = {'Winslow', false},
            ["185.169.134.107:7777"] = {'Yuma', false},
        }

        for i = 1, #tab do
            local index = tab[i];

            local time = index.time;
            if os.time() - time < 60 then
                arizonaServerIpTable[index.serverIP][2] = true
            end
        end

        for k, v in pairs(arizonaServerIpTable) do
            if not v[2] then
                printLog(v[1]);
            end
        end
    end
end
 

FakeSince

Активный
Автор темы
245
55
Если ты собираешься юзать rakhelper и из него брать инфу, то нужно добавить в функцию getBotInfoTab получение ипа
Lua:
function getBotInfoTab()
    local nick = getNickName();
    local id = tostring(getBotId());
    local lvl = tostring(getScore());
    local health = tostring(getHealth());
    local money = tostring(getMoney());
    local time = os.time();

    local statusTab = {
        [0] = "Подключение",
        [1] = "Пешеход",
        [2] = "Водитель",
        [3] = "Пассажир",
        [4] = "Наблюдатель",
        [5] = "Садится в машину";
    }
    local status = statusTab[getBotState()] or getBotState();

    local afk = os.time() - afkTime >= 3 and "Да" or "Нет";
    local connect = isBotConnected() and "Да" or "Нет";
    local spawn = isBotSpawned() and "Да" or "Нет";
    local server = getServerName();
    local serverIP = getServerAddress();

    return {
        time = time,
        nick = nick,
        id = id,
        lvl = lvl,
        health = health,
        money = money,
        status = status,
        afk = afk,
        connect = connect,
        spawn = spawn,
        serverIP = serverIP,
        server = server;
    }
end

А в своей фунции getAllBotInfo сделать:
Lua:
function getAllBotInfo()
    local path = getRakBotPath() .. "\\scripts\\config";
    local res = findDirectoryFile(path, "%a+%d+%.json");

    if res then
        local tab = {};

        for i = 1, #res do
            local jsonString = readFile(path .. "\\" .. res[i]);
            if jsonString then
                tab[#tab + 1] = json.decode(jsonString);
            end
        end
      
        -- не все ипы, добавь сам
        local arizonaServerIpTable = {
            ["185.169.134.45:7777"] = {'Brainburg', false},
            ["185.169.134.44:7777"] = {'Chandler', false},
            ["80.66.82.190:7777"] = {'Show-low', false},
            ["80.66.82.188:7777"] = {'Case grande', false},
            ["80.66.82.191:7777"] = {'Gilbert', false},
            ["185.169.134.171:7777"] = {'Glendale', false},
            ["185.169.134.172:7777"] = {'Kingman', false},
            ["185.169.134.59:7777"] = {'Mesa', false},
            ["185.169.134.174:7777"] = {'Payson', false},
            ["185.169.134.3:7777"] = {'Phoenix', false},
            ["185.169.134.166:7777"] = {'Prescott', false},
            ["185.169.134.61:7777"] = {'RedRock', false},
            ["185.169.134.5:7777"] = {'SaintRose', false},
            ["185.169.134.43:7777"] = {'Scottdale', false},
            ["185.169.134.109:7777"] = {'Surprise', false},
            ["80.66.82.168:7777"] = {'Page', false},
            ["185.169.134.4:7777"] = {'Tucson', false},
            ["185.169.134.173:7777"] = {'Winslow', false},
            ["185.169.134.107:7777"] = {'Yuma', false},
        }

        for i = 1, #tab do
            local index = tab[i];

            local time = index.time;
            if os.time() - time < 60 then
                arizonaServerIpTable[index.serverIP][2] = true
            end
        end

        for k, v in pairs(arizonaServerIpTable) do
            if not v[2] then
                printLog(v[1]);
            end
        end
    end
end
Сделал в ракхелпере все как ты сказал, добавил получение ипа в getBotInfoTab и в getAllBotInfo вставил тот код который ты скинул, еще и добавил айпишники, по итогу не работает ничего
 

The Spark

Известный
653
671
Вот я изменил RakHelper, по функциям выше. Всё работает, выводит названия серверов, с которых не подключен бот.
Тыкаю Парсер, тыкаю вывести инфу о ботах
1655198643036.png

(я подключился к Yuma, Phoenix и Tucson, их не выводит в список)
 

Вложения

  • RakHelper.lua
    10.1 KB · Просмотры: 9

FakeSince

Активный
Автор темы
245
55
Вот я изменил RakHelper, по функциям выше. Всё работает, выводит названия серверов, с которых не подключен бот.
Тыкаю Парсер, тыкаю вывести инфу о ботах
Посмотреть вложение 152402
(я подключился к Yuma, Phoenix и Tucson, их не выводит в список)
Поставил твой скрипт, вот такая ошибка:
[11:06:17] [ERROR] Ошибка скрипта "RakHelper.lua": C:\Users\user\Desktop\RakBot\scripts\RakHelper.lua:218: attempt to index a nil value
[11:06:17] [ERROR] stack traceback:
[11:06:17] [ERROR] C:\Users\user\Desktop\RakBot\scripts\RakHelper.lua:218: in function 'func'
[11:06:17] [ERROR] C:\Users\user\Desktop\RakBot\scripts\RakHelper.lua:286: in function <C:\Users\BanditAzure\Desktop\RakBot\scripts\RakHelper.lua:278>
 

The Spark

Известный
653
671
Поставил твой скрипт, вот такая ошибка:
[11:06:17] [ERROR] Ошибка скрипта "RakHelper.lua": C:\Users\user\Desktop\RakBot\scripts\RakHelper.lua:218: attempt to index a nil value
[11:06:17] [ERROR] stack traceback:
[11:06:17] [ERROR] C:\Users\user\Desktop\RakBot\scripts\RakHelper.lua:218: in function 'func'
[11:06:17] [ERROR] C:\Users\user\Desktop\RakBot\scripts\RakHelper.lua:286: in function <C:\Users\BanditAzure\Desktop\RakBot\scripts\RakHelper.lua:278>
Т.к структура таблицы поменялась, тебе нужно удалить все временные файлы в папке "RakBot-0.8.2.1\scripts\config" RakHelper....json. Они удаляются сами, после выхода ракбота, но если они остались - удали.
Так же может мешать оригинальный РакХелпер, ведь скрипты юзают один файл.
Короче, если ты удалишь все левые скрипты, удалишь config - у тебя точно всё заработает. Потом уже разберешься из-за чего не работало...
 

FakeSince

Активный
Автор темы
245
55
Т.к структура таблицы поменялась, тебе нужно удалить все временные файлы в папке "RakBot-0.8.2.1\scripts\config" RakHelper....json. Они удаляются сами, после выхода ракбота, но если они остались - удали.
Так же может мешать оригинальный РакХелпер, ведь скрипты юзают один файл.
Короче, если ты удалишь все левые скрипты, удалишь config - у тебя точно всё заработает. Потом уже разберешься из-за чего не работало...
удалил все с папки конфиг, удалил ракхелпер от дозора, ошибка та же.
 
  • Грустно
Реакции: The Spark

FakeSince

Активный
Автор темы
245
55
удалил все с папки конфиг, удалил ракхелпер от дозора, ошибка та же.
Вообщем, попробовал еще пару раз в разное время, не меняя ничего в скрипте, иногда работает, иногда нет, нихуя не понял, однако спасибо.