Lua [LUA] Autologin

Ксавик

Новичок
Автор темы
2
1
Версия SA-MP
  1. 0.3.7 (R1)
  2. 0.3.7-R2
  3. 0.3.7-R3
  4. Любая
Мой первый скрипт!
1 вариант не работает на Trinity RP, но подходит для тех у кого привязан TG/EMAIL и т.п. не дружит с реконектами!
2 вариант может баговаться (нужно просто нажать enter) и не подходит тем у кого что то привязано! дружит с реконектами
MOONLOADER 0.26
учту все ваши советы!
 

Вложения

  • Autologin v1.1.rar
    1.4 KB · Просмотры: 47
  • Вау
Реакции: minxty

why ega

РП игрок
Модератор
2,540
2,233
учту все ваши советы!
1. Не стоит писать "lib" перед подключением библиотек, оно уже предусмотрено
1708814520728.png

2. Не подключай библиотеки, которые ты не используешь. В твоей случае это moonloader. Не путай MoonLoader.asi и moonloader.lua. Первое это сам загрузчик Lua скриптов, а второе лишь библиотека, которая хранит всякую информацию (можешь убедиться сам, открыв его в moonloader/lib)
1708814650667.png

3. Не создавай переменные, которые не используешь
1708814687232.png

4. Не добавляй бесконечный цикл, если не используешь его. Куда более практичнее применить wait(-1) - бесконечное ожидание, которое не даст выгрузиться скрипту
1708814763639.png

5. Используй один тип кавычек, не чередуя одинарные с двойными, без нужных на то причин
1708814800094.png

6. Старайся не использовать глобальные переменные или хотя бы не использовать вперемешку с локальными без видимых на то причин
1708814860520.png
 

why ega

РП игрок
Модератор
2,540
2,233
Остаётся лишь 1 вопрос. Какие кавычки трушные
Двойные
 
  • Нравится
Реакции: spoty

Tema05

Известный
1,441
401
Двойные
передай это FYP'у

Lua:
script_name('ML-AutoReboot')
script_version_number(7)
script_version('1.1')
script_author('FYP')
script_description('reloads edited scripts automatically')
script_moonloader(021)
script_properties('work-in-pause')

local ffi = require 'ffi'
ffi.cdef[[
    typedef void* HANDLE;
    typedef void* LPSECURITY_ATTRIBUTES;
    typedef unsigned long DWORD;
    typedef int BOOL;
    typedef const char *LPCSTR;
    typedef struct _FILETIME {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
    } FILETIME, *PFILETIME, *LPFILETIME;

    BOOL __stdcall GetFileTime(HANDLE hFile, LPFILETIME lpCreationTime, LPFILETIME lpLastAccessTime, LPFILETIME lpLastWriteTime);
    HANDLE __stdcall CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
    BOOL __stdcall CloseHandle(HANDLE hObject);
]]

--- Config
autoreloadDelay    = 500 -- ms
---

function main()
  -- for the reload case
  onSystemInitialized()
  while true do
    wait(autoreloadDelay)
    if files ~= nil then
      for fpath, saved_time in pairs(files) do
        local file_time = get_file_modify_time(fpath)
        if file_time ~= nil and (file_time[1] ~= saved_time[1] or file_time[2] ~= saved_time[2]) then
          local scr = find_script_by_path(fpath)
          if scr ~= nil then
            print('Reloading "' .. scr.name .. '"...')
            scr:reload()
          else
            print('Loading "' .. fpath .. '"...')
            script.load(fpath)
          end
          files[fpath] = file_time -- update time
        end
      end
    end
  end
end

function onSystemInitialized()
  if not initialized then
    init()
  end
end

function init()
  initialized = true
  files = {}
  -- store all loaded scripts
  for _, s in ipairs(script.list()) do
    local time = get_file_modify_time(s.path)
    if time ~= nil then
      files[s.path] = time
    end
  end
end

function find_script_by_path(path)
  for _, s in ipairs(script.list()) do
    if s.path == path then
      return s
    end
  end
  return nil
end

function get_file_modify_time(path)
    local handle = ffi.C.CreateFileA(path,
        0x80000000, -- GENERIC_READ
        0x00000001 + 0x00000002, -- FILE_SHARE_READ | FILE_SHARE_WRITE
        nil,
        3, -- OPEN_EXISTING
        0x00000080, -- FILE_ATTRIBUTE_NORMAL
        nil)
    local filetime = ffi.new('FILETIME[3]')
    if handle ~= -1 then
        local result = ffi.C.GetFileTime(handle, filetime, filetime + 1, filetime + 2)
        ffi.C.CloseHandle(handle)
        if result ~= 0 then
            return {tonumber(filetime[2].dwLowDateTime), tonumber(filetime[2].dwHighDateTime)}
        end
    end
    return nil
end
 

Вложения

  • AutoReboot.lua
    2.7 KB · Просмотры: 1

why ega

РП игрок
Модератор
2,540
2,233
передай это FYP'у

Lua:
script_name('ML-AutoReboot')
script_version_number(7)
script_version('1.1')
script_author('FYP')
script_description('reloads edited scripts automatically')
script_moonloader(021)
script_properties('work-in-pause')

local ffi = require 'ffi'
ffi.cdef[[
    typedef void* HANDLE;
    typedef void* LPSECURITY_ATTRIBUTES;
    typedef unsigned long DWORD;
    typedef int BOOL;
    typedef const char *LPCSTR;
    typedef struct _FILETIME {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
    } FILETIME, *PFILETIME, *LPFILETIME;

    BOOL __stdcall GetFileTime(HANDLE hFile, LPFILETIME lpCreationTime, LPFILETIME lpLastAccessTime, LPFILETIME lpLastWriteTime);
    HANDLE __stdcall CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
    BOOL __stdcall CloseHandle(HANDLE hObject);
]]

--- Config
autoreloadDelay    = 500 -- ms
---

function main()
  -- for the reload case
  onSystemInitialized()
  while true do
    wait(autoreloadDelay)
    if files ~= nil then
      for fpath, saved_time in pairs(files) do
        local file_time = get_file_modify_time(fpath)
        if file_time ~= nil and (file_time[1] ~= saved_time[1] or file_time[2] ~= saved_time[2]) then
          local scr = find_script_by_path(fpath)
          if scr ~= nil then
            print('Reloading "' .. scr.name .. '"...')
            scr:reload()
          else
            print('Loading "' .. fpath .. '"...')
            script.load(fpath)
          end
          files[fpath] = file_time -- update time
        end
      end
    end
  end
end

function onSystemInitialized()
  if not initialized then
    init()
  end
end

function init()
  initialized = true
  files = {}
  -- store all loaded scripts
  for _, s in ipairs(script.list()) do
    local time = get_file_modify_time(s.path)
    if time ~= nil then
      files[s.path] = time
    end
  end
end

function find_script_by_path(path)
  for _, s in ipairs(script.list()) do
    if s.path == path then
      return s
    end
  end
  return nil
end

function get_file_modify_time(path)
    local handle = ffi.C.CreateFileA(path,
        0x80000000, -- GENERIC_READ
        0x00000001 + 0x00000002, -- FILE_SHARE_READ | FILE_SHARE_WRITE
        nil,
        3, -- OPEN_EXISTING
        0x00000080, -- FILE_ATTRIBUTE_NORMAL
        nil)
    local filetime = ffi.new('FILETIME[3]')
    if handle ~= -1 then
        local result = ffi.C.GetFileTime(handle, filetime, filetime + 1, filetime + 2)
        ffi.C.CloseHandle(handle)
        if result ~= 0 then
            return {tonumber(filetime[2].dwLowDateTime), tonumber(filetime[2].dwHighDateTime)}
        end
    end
    return nil
end
там еще табы == 2 пробела
 
  • Нравится
Реакции: chapo

movebx

Известный
48
149
СУКА СХУЯЛИ?

С чего вы сделали вывод, что какое-то действие правильное, какое то неправильное?
В оф. реф. мануале по луа используются двойные ковычки - https://lua.org/manual/5.4/manual.html#2.6
В самом популярном гайде от нейлона везде и всюду используются одинарные ковычки - https://tylerneylon.com/a/learn-lua/
Так же некоторые библиотеки используют одинарные ковычки (Base64 например) - https://lua-users.org/wiki/BaseSixtyFour
И кому верить? Да никому. Пиши свой код так, чтобы он был понятен тебе. А если работаешь в команде - сделайте определенные конвенции по написанию кода.

Тут еще верным будет доебаться до самой структуры мунлоадера. Весь мунлоадер написан с использованием camelCase-а, а если бы вы, например, выбрали в качестве основного стиля нейминга переменных snake_case, то все равно получается лютое говнище с перемешиванием стилей.
Лично я всегда пишу так, как требует определенное SDK.
DirectX? - венгерская нотация с PascalCase
WinApi - то же самое
луашки на неверлуз? - snake_case, т.к. весь их API построен на snake_case-е.

Поэтому не слушайте гоев, которые будут вам затирать за красивый кодстайл, пишите так, чтобы было понятно вам.
 

P U L V I L I Z A T O R

Участник
83
29
"Обожаю" автологины. Условному Васе чтобы украсть ваши пароли нужно человеку с автологином скинуть скрипт, который файлик с паролями кинет мне куда нибудь на сервер, чтобы я благополучно спиздил ваши аккаунты. Вреднее подобных скриптов только скрипт-стиллер прямой может быть. Не ставьте автологины никогда, там пароли не шифруются, вы проебете свои аккаунты.

Если хотите быстро залетать в аккаунт используйте менеджеры паролей по типу KeePassXC. Один раз ввели общий генеральный пароль, который расшифровывает базу паролей и просто CTRL + C / V в окна в сампе и всё.
 
Последнее редактирование:

Landyshev

Известный
251
100
"Обожаю" автологины. Условному Васе чтобы украсть ваши пароли нужно человеку с автологином скинуть скрипт, который файлик с паролями кинет мне куда нибудь на сервер, чтобы я благополучно спиздил ваши аккаунты. Вреднее подобных скриптов только скрипт-стиллер прямой может быть. Не ставьте автологины никогда, там пароли не шифруются, вы проебете свои аккаунты.
Ты на бх, а не на черном рынке, держу в курсе
 
  • Bug
Реакции: tihonok

why ega

РП игрок
Модератор
2,540
2,233
Обожаю" автологины. Условному Васе чтобы украсть ваши пароли нужно человеку с автологином скинуть скрипт, который файлик с паролями кинет мне куда нибудь на сервер, чтобы я благополучно спиздил ваши аккаунты.
Сомневаюсь, что есть особые причины винить в этом автологин. Хотя, всё же, шифрование не помешало бы