как развернуть игру используя луа?

  • Автор темы deleted-user-548977
  • Дата начала
D

deleted-user-548977

Гость
Автор темы
Версия MoonLoader
.026-beta
?
 
Решение
Если юзать с полноэкранном могут возникать различные проблемы. Тут уж конфликт с виндой
Lua:
--куда-то
local ffi = require 'ffi'
ffi.cdef [[
    bool ShowWindow(unsigned long hWnd, int nCmdShow);
]]
local hwnd = ffi.cast('unsigned long**', 0xC17054)[0][0]

-- разворачиваем
ffi.C.ShowWindow(hwnd, 3)

Tema05

Известный
1,506
475
Если юзать с полноэкранном могут возникать различные проблемы. Тут уж конфликт с виндой
Lua:
--куда-то
local ffi = require 'ffi'
ffi.cdef [[
    bool ShowWindow(unsigned long hWnd, int nCmdShow);
]]
local hwnd = ffi.cast('unsigned long**', 0xC17054)[0][0]

-- разворачиваем
ffi.C.ShowWindow(hwnd, 3)
 
Последнее редактирование:
D

deleted-user-548977

Гость
Автор темы
Если юзать с полноэкранном могут возникать различные проблемы. Тут уж конфликт с виндой
Lua:
--куда-то
local ffi = require 'ffi'
ffi.cdef [[
    bool ShowWindow(unsigned long hWnd, int nCmdShow);
]]
local hwnd = ffi.cast('unsigned long**', 0xC17054)[0][0]

-- разворачиваем
ffi.C.ShowWindow(hwnd, 3)
через раз конечно, но работает, а можно сделать просто чтобы иконка в панели задач начинала мигать? без разворачивания уже
 

зач хейт

Потрачен
114
43
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
через раз конечно, но работает, а можно сделать просто чтобы иконка в панели задач начинала мигать? без разворачивания уже
Lua:
local ffi = require('ffi')

ffi.cdef [[
    int BOOL;
    int HANDLE;
    int HWND;
    int bInvert;
    HWND GetActiveWindow(void);
    BOOL FlashWindow(HWND hWnd, BOOL bInvert);
]]

ffi.C.FlashWindow(ffi.C.GetActiveWindow(), true)
 
D

deleted-user-548977

Гость
Автор темы
Lua:
local ffi = require('ffi')

ffi.cdef [[
    int BOOL;
    int HANDLE;
    int HWND;
    int bInvert;
    HWND GetActiveWindow(void);
    BOOL FlashWindow(HWND hWnd, BOOL bInvert);
]]

ffi.C.FlashWindow(ffi.C.GetActiveWindow(), true)
крашит скрипт когда отправляю нужное сообщение, можешь подсказать ошибку?

Lua:
local sampev = require 'lib.samp.events'
local ffi    = require 'ffi'

function sampev.onServerMessage(color, text)   
    if text:match('o_o') then
        ffi.cdef [[
            int BOOL;
            int HANDLE;
            int HWND;
            int bInvert;
            HWND GetActiveWindow(void);
            BOOL FlashWindow(HWND hWnd, BOOL bInvert);
        ]]
        
        ffi.C.FlashWindow(ffi.C.GetActiveWindow(), true)
    end
end
 

зач хейт

Потрачен
114
43
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
крашит скрипт когда отправляю нужное сообщение, можешь подсказать ошибку?

Lua:
local sampev = require 'lib.samp.events'
local ffi    = require 'ffi'

function sampev.onServerMessage(color, text)  
    if text:match('o_o') then
        ffi.cdef [[
            int BOOL;
            int HANDLE;
            int HWND;
            int bInvert;
            HWND GetActiveWindow(void);
            BOOL FlashWindow(HWND hWnd, BOOL bInvert);
        ]]
       
        ffi.C.FlashWindow(ffi.C.GetActiveWindow(), true)
    end
end
мб я обосрался пока пытался переписать, есть точно работающий сниппет https://www.blast.hk/threads/13380/post-272625
 
  • Нравится
Реакции: deleted-user-548977

Tema05

Известный
1,506
475
мб я обосрался пока пытался переписать, есть точно работающий сниппет https://www.blast.hk/threads/13380/post-272625
А то что ты получаешь hwnd активного окна, когда человек собирается это юзать в свёрнутом режиме ни о чём не говорит?
Вот статический адрес hwnd окна игры, который вернёт то что нужно при любых обстоятельствах. Используйте его, а не какой-то GetActiveWindow
Lua:
local hwnd = ffi.cast('unsigned long**', 0xC17054)[0][0]

через раз конечно, но работает, а можно сделать просто чтобы иконка в панели задач начинала мигать? без разворачивания уже
Полноэкран к сожалению работает хреново. Это вопрос винды, с этим на 100% нельзя справиться. Особенно больно из другого полноэкрана и темболее сампа разворачиваться

Я вывел +- для себя стабильный способ работающий в 99.9% случаев. Мои условия: Фикс реестра + антиафк + лаунчер арз + винда 10.
Lua:
ffi.cdef [[
    unsigned long GetForegroundWindow(void);
]]

local fore = ffi.C.GetForegroundWindow()
if fore ~= hwnd then
    ffi.C.ShowWindow(fore, 6)
    wait(500)
    ffi.C.ShowWindow(hwnd, 3)
end
500мс это прям на грани и скорее всего если пк слабый этого будет мало. Ставь больше если что
 
Последнее редактирование:
  • Нравится
Реакции: зач хейт
D

deleted-user-548977

Гость
Автор темы
А то что ты получаешь hwnd активного окна, когда человек собирается это юзать в свёрнутом режиме ни о чём не говорит?
Вот статический адрес hwnd окна игры, который вернёт то что нужно при любых обстоятельствах. Используйте его, а не какой-то GetActiveWindow
Lua:
local hwnd = ffi.cast('unsigned long**', 0xC17054)[0][0]


Полноэкран к сожалению работает хреново. Это вопрос винды, с этим на 100% нельзя справиться. Особенно больно из другого полноэкрана и темболее сампа разворачиваться

Я вывел +- для себя стабильный способ работающий в 99.9% случаев. Мои условия: Фикс реестра + антиафк + лаунчер арз + винда 10.
Lua:
ffi.cdef [[
    unsigned long GetForegroundWindow(void);
]]

local fore = ffi.C.GetForegroundWindow()
if fore ~= hwnd then
    ffi.C.ShowWindow(fore, 6)
    wait(500)
    ffi.C.ShowWindow(hwnd, 3)
end
500мс это прям на грани и скорее всего если пк слабый этого будет мало. Ставь больше если что
спасибо, а не подскажешь как использовать его в коде? у меня никак не получается, не доходит до меня
функции main нет потому что в основном коде она занята под регистрацию команд

Lua:
local sampev = require 'lib.samp.events'
local ffi    = require 'ffi'

ffi.cdef [[
    unsigned long GetForegroundWindow(void);
]]

local fore = ffi.C.GetForegroundWindow()

function sampev.onServerMessage(color, text)
    if text:match('o_o') then
        lua_thread.create(function()
            if fore ~= hwnd then
                ffi.C.ShowWindow(fore, 6)
                wait(500)
                ffi.C.ShowWindow(hwnd, 3)
                addOneOffSound(0.00, 0.00, 0.00, 1132)
            end
        end)
    end
end
 

ChаtGPT

Известный
415
101
спасибо, а не подскажешь как использовать его в коде? у меня никак не получается, не доходит до меня
функции main нет потому что в основном коде она занята под регистрацию команд

Lua:
local sampev = require 'lib.samp.events'
local ffi    = require 'ffi'

ffi.cdef [[
    unsigned long GetForegroundWindow(void);
]]

local fore = ffi.C.GetForegroundWindow()

function sampev.onServerMessage(color, text)
    if text:match('o_o') then
        lua_thread.create(function()
            if fore ~= hwnd then
                ffi.C.ShowWindow(fore, 6)
                wait(500)
                ffi.C.ShowWindow(hwnd, 3)
                addOneOffSound(0.00, 0.00, 0.00, 1132)
            end
        end)
    end
end
Пока ты в свёрнутом режиме, игра не работает, сообщения не хукаются. Тебе нужно, чтобы игра работала в свёрнутом режиме и событие обрабатывалось. Можешь спиздить код отсюда.
 
D

deleted-user-548977

Гость
Автор темы
Пока ты в свёрнутом режиме, игра не работает, сообщения не хукаются. Тебе нужно, чтобы игра работала в свёрнутом режиме и событие обрабатывалось. Можешь спиздить код отсюда.
антиафк есть, звук появляется, но ничего кроме этого не происходит
 

ChаtGPT

Известный
415
101
Можешь тут поковырять
 
  • Нравится
Реакции: deleted-user-548977
D

deleted-user-548977

Гость
Автор темы
Можешь тут поковырять
хорошо, в целом со всем, что мне нужно было я разобрался, спасибо всем
 

Tema05

Известный
1,506
475
спасибо, а не подскажешь как использовать его в коде? у меня никак не получается, не доходит до меня
функции main нет потому что в основном коде она занята под регистрацию команд

Lua:
local sampev = require 'lib.samp.events'
local ffi    = require 'ffi'

ffi.cdef [[
    unsigned long GetForegroundWindow(void);
]]

local fore = ffi.C.GetForegroundWindow()

function sampev.onServerMessage(color, text)
    if text:match('o_o') then
        lua_thread.create(function()
            if fore ~= hwnd then
                ffi.C.ShowWindow(fore, 6)
                wait(500)
                ffi.C.ShowWindow(hwnd, 3)
                addOneOffSound(0.00, 0.00, 0.00, 1132)
            end
        end)
    end
end
Ну кинь тогда полный код или опиши хоть что не так