1. Для общения на форуме, в чате или личной переписке наличие аватара ОБЯЗАТЕЛЬНО!

Красивый вывод в консоль, лог и многое другое

Тема в разделе "Диетическая Солянка 2016", создана пользователем Баба Яга, 15 апр 2021.

  1. Баба Яга

    Баба Яга Ветеран

    149
    28
    13 апр 2019
    Недавно столкнулся с некоторой проблемой...
    Для своих манипуляций мне понадобилось получить во время игры, из игры, из скрипта - системное время компьютера. Но, как оказалось, в оригинальном движке сталкера - просто так его получить нельзя, разве что только с танцами и бубном и некоторыми извращениями. Копал по всему инету, и вот - повезло, кое что нарыл. Даже больше - чем хотелось.

    Нашёл вот такую замечательную библиотеку, xrluafix:
    Качать тут

    Всё проверил - всё работает (имею в виду os,io,log,math. XML - ещё не проверял). Проверял на Диетической Солянке, на последнем патче от Дениса.

    Итак, что она может эта библиотека:
    --Дополнительные функции:
    --глобальное пространство имен
    void RvP() --открывает доп. пространства имен, регистрирует новые функции
    void log123(string a, string b, string c, ...) --вывод в лог аргументов. Каждый аргумент в новой строке
    void SetLog(string FileName[, string fmt]) --установка дополнительного лог файла.
    --Всё (и даже немногим больше) из основного лога будет дублироваться в этот файл.
    --Даже при безлоговом вылете из файла не теряется ни одна строка!
    --Формат указывается для вывода дополнительно даты\времени\...
    --Стандартный формат "[%x %X]\t"
    --Полное описание: strftime - C++ Reference
    table GetKB() --получение булевой таблицы с состояниями нажатости клавишь.
    --индексы кнопок: http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
    --table
    object random(table t) --возвращяет случайный елемент таблицы t
    unsigned int size(table t) --возвращает "реальный" размер таблицы.
    --Аналогично: c = 0; for k,v in pairs(t) do c = c + 1 end return c
    table keys(table t) --возвращяет таблицу в которой ключи - целые числа, а значения - значения исходной таблицы
    table values(table t) --аналогично для значений
    --string
    string trim(string s) --обрезает пробелы в строке
    string trim_l(string s) --тоже только слева
    string trim_r(string s) --справа
    string trim_w(string s) --обрезает первое "слово"
    --так же имеются функции pack\unpack из библиотеки lpack
    --подробное описание: lua-users wiki: Lua Pack
    --math
    number random([number a[, number b]]) --замена стандартного генератора на более качественный
    void randomseed([number seed]) --установка начального сида. При вызове без аргументов сидируется истинно случайным числом
    --lfs
    --Lua File System
    --Оригинальная Lua библиотека. Подробное описание и использование:
    --http://keplerproject.github.com/luafilesystem/
    --xml
    --Lua XML
    --Тоже оригинальная Lua библиотека. Более подробно в шапке.

    --Дополнительные\возвращенные пространства имен
    os
    io
    package --так же тут находится глобальная функция require
    debug

    Вот, например, как теперь выглядит вывод в лог после подключения данной библиотеки, довольно удобно и красиво:
    [​IMG]



    [​IMG]

    В итоге, что можем? Кратенько, основное: получать системное время, выводить нормально в лог, создавать файлы, удалять файлы, записывать данные в файлы - короче, полноценная работа с файловой системой - открываются заманчивые перспективы для мододелов! Теперь можно реализовать очень многое, например, тот-же - дневник - для записей во время игры, чтобы ничего не забыть и т.д.

    Как подключить?
    В архиве есть описание, как подключать, но, не всё и, возможно, не всем будет понятно. Расскажу как сделал я.

    1) скачал архив тыц xrLua.7z
    2) распаковал
    3) получилось так:
    [​IMG]
    4) все эти файлы, что на картинке выше - скопировал в папку -> f:\Gama\NS2021\bin\
    5) в папке bin запустил файл: install.bat
    6) открыл файл: F:\Gama\NS2021\gamedata\scripts\_g.script
    7) в самый конец файла дописал (для активации этой библиотеки автоматически - при каждой загрузке игры - как раз про это - в описании ничего нету...):

    Код:
    --' RvP() -- активируем дополнительные функции LUA из библиотеки -> xrluafix
    --' работают только при загруженной игре, именно - игре, если просто загрузить меню - то не работают
    RvP() -- собственно, сама активация всех функций
    --' объявляем глобальную переменную   LOG - можете придумать свою
    LOG = log123 -- вывод в консоль(лог) из   xrluafix
    LOG( "~ --- --- ---")
    LOG( "~ xrluafix -> RvP() -> подключен, LOG -> можно использовать." )
    LOG( "~ --- --- ---")
    --' ------------------
    8) Всё. Берём и пользуемся. Новая Игра - НЕ НУЖНА.
    Функционал полностью - как в полноценной Lua.

    Небольшой бонус (в описание к библиотеке этого нет) накопал сегодня ночью путём проб и ошибок :confused:
    Код:
    LOG("  ( ) ничего перед строкой = просто белый цвет текста")
    LOG("- (-) перед строкой = ЗЕЛЁНЫЙ цвет текста")
    LOG("! (!) перед строкой = КРАСНЫЙ цвет текста")
    LOG("~ (~) перед строкой = ЖЁЛТЫЙ цвет текста")
    LOG("* (*) перед строкой = СЕРЫЙ цвет текста")
    LOG("# (#) перед строкой = БИРЮЗОВЫЙ цвет текста")
    [​IMG]

    Возможно, кто-то знал об этом всём, я - не знал, и судя по тому, что я за последнюю неделю в поисках ответа на свои вопросы пообщался на многих форумах по этому поводу, то выяснилось, почти никто не знал. Думаю, статья, будет полезной! :thank_you::drinks:

    P.S. На всякий пожарный - загружу сюда тоже библиотеку и исходники, а то вдруг ссылка работать перестанет, жалко, если такая вещь, и потеряется...
     

    Вложения:

    • xrLua.7z
      Размер файла:
      100,5 КБ
      Просмотров:
      2
    • исходники.zip
      Размер файла:
      294,9 КБ
      Просмотров:
      2
    Последнее редактирование: 15 апр 2021
    DrDron, basil и yurv3 нравится это.
  2. Баба Яга

    Баба Яга Ветеран

    149
    28
    13 апр 2019
    Код:
    --' создаём файл (любое имя, любое расширение)
    local newFile = io.open( "my_file.txt", "w+" ) --' открыли - если есть, или создали - если нет
    --' ... тут что-то делаем с ним, пишем в него, читаем из него и т.д.
    newFile:close() --' закончили работать с файлом - закрыли его
    
    --' если больше не нужен - удаляем
    local res, err1, err2, err3 = os.remove("my_file.txt")
    LOG( "~ --- --- ---" )
    LOG("~ ", "res: "..tostring(res), "err1: "..tostring(err1), "err2: "..tostring(err2), "err3: "..tostring(err3) )
    LOG( "~ --- --- ---" )
    
    по умолчанию, если написать так: io.open( "my_file.txt", "w+" ) файл создастся в папке bin, если хотим другую папку, то всё как в cmd, например, на папку выше:
    io.open( "..\\my_file.txt", "w+" )
     
    DrDron, basil и yurv3 нравится это.

Поделиться этой страницей