Действие при появлении GameText'a

Dmitriy Makarov

25.05.2021
Автор темы
Проверенный
2,500
1,131
Версия MoonLoader
.026-beta
Видел в "приватных скриптах" (FishBot) за 400 рублей, что там задержки практически нету. Как только появляется подобный текст - он сразу кликает без задержки (Ну максимум пару мс).
Когда я пытаюсь сделать задержку в 100мс, у меня скрипт перестает работать. (Не крашит. Просто не делает ничего)
sa-mp-001.png

Можно это как-нибудь по-другому сделать?
Lua:
function sampev.onDisplayGameText(style, time, text)
    if text:find("~w~Press ~r~~k~~PED_FIREWEAPON~") then
        lua_thread.create(function()
            wait(100)
            setVirtualKeyDown(VK_LBUTTON, true)
            wait(10)
            setVirtualKeyDown(VK_LBUTTON, false)
        end)
    elseif text:find("~w~Press ~g~~k~~PED_LOCK_TARGET~") then
        lua_thread.create(function()
            wait(100)
            setVirtualKeyDown(VK_RBUTTON, true)
            wait(10)
            setVirtualKeyDown(VK_RBUTTON, false)
        end)
    end
end
С задержкой от 300-400мс уже все бывает нормально.
 

Dmitriy Makarov

25.05.2021
Автор темы
Проверенный
2,500
1,131
wait(10) скорее всего мало, ставь 50-100 минимум. А еще лучше используй функцию setGameKeyState
Я хотел =)
Я просто не знал какие клавиши отвечают за ЛКМ и ПКМ
Lua:
local keys_onfoot = {
    GOLEFT_GORIGHT = 0,
    GOFORWARD_GOBACK = 1,
    ANSWERPHONE_FIREWEAPONALT = 4,
    CYCLEWEAPONLEFT_SNIPERZOOMIN = 5,
    LOCKTARGET = 6,
    CYCLEWEAPONRIGHT_SNIPERZOOMOUT = 7,
    GROUPCONTROLFWD = 8,
    GROUPCONTROLBWD = 9,
    CONVERSATIONNO = 10,
    CONVERSATIONYES = 11,
    CHANGECAMERAVIEW = 13,
    JUMP = 14,
    ENTERVEHICLE = 15,
    SPRINT = 16,
    FIREWEAPON = 17,
    CROUCH = 18,
    LOOKBEHIND = 19,
    WALK = 21
}

local keys_incar = {
    GOLEFT_GORIGHT = 0,
    STEERUP_STEERDOWN = 1,
    TURRETLEFT_TURRETRIGHT = 2,
    TURRETUP_TURRETDOWN = 3,
    FIREWEAPONALT = 4,
    LOOKLEFT = 5,
    HANDBRAKE = 6,
    LOOKBEHIND_LOOKRIGHT = 7,
    RADIOSTATIONUP = 8,
    RADIOSTATIONDOWN = 9,
    CONVERSATIONNO = 10,
    CONVERSATIONYES = 11,
    CHANGECAMERAVIEW = 13,
    BRAKE = 14,
    EXITVEHICLE = 15,
    ACCELERATE = 16,
    FIREWEAPON = 17,
    HORN = 18,
    TOGGLESUBMISSION = 19
}
 

Dmitriy Makarov

25.05.2021
Автор темы
Проверенный
2,500
1,131
А еще лучше используй функцию setGameKeyState
Какая, кстати, разница между VirtualKeyDown и GameKeyState?
ЛКМ - 17, ПКМ - 6. Вроде так
Да, работает. =)
ставь 50-100 минимум
Не, там от 300 минимум, так как у меня с 200 скрипт 1 раз пропустил GameText.
 

_razor

t.me/sssecretway | ТГК: t.me/razor_code
Всефорумный модератор
1,948
3,211
  • Нравится
Реакции: Dmitriy Makarov

_razor

t.me/sssecretway | ТГК: t.me/razor_code
Всефорумный модератор
1,948
3,211
Я уже задержку до 500мс поднял, ибо он в начале иногда не реагирует на GameText и приходится самому 1 раз нажать на кнопку мыши, а дальше скрипт начинает работать.
Фигня какая-то..
Отправляй клавиши через синхронизацию, а не нажатиями
 
  • Нравится
Реакции: Dmitriy Makarov

_razor

t.me/sssecretway | ТГК: t.me/razor_code
Всефорумный модератор
1,948
3,211
Не, не умею. Не имел дело еще с синхрой. =)
Lua:
-- для ЛКМ
local _, myId = sampGetPlayerIdByCharHandle(playerPed) -- получаем свой ID
local data = allocateMemory(68) -- выделяем память под структуру
sampStorePlayerOnfootData(myId, data) -- готовим структуру для записи значений в нее
setStructElement(data, 4, 2, 4, false) -- data (наша структура), 4 (оффсет в структуре), 2 (sKeys имеет тип uint16_t, поэтому 2 байта), 4 (клавиша ЛКМ)
sampSendOnfootData(data) -- отправляем пакет с заполненой структурой
freeMemory(data) -- очищаем память

-- для ПКМ

local _, myId = sampGetPlayerIdByCharHandle(playerPed) -- получаем свой ID
local data = allocateMemory(68) -- выделяем память под структуру
sampStorePlayerOnfootData(myId, data) -- готовим структуру для записи значений в нее
setStructElement(data, 4, 2, 128, false) -- data (наша структура), 4 (оффсет в структуре), 2 (sKeys имеет тип uint16_t, поэтому 2 байта), 128 (клавиша ПКМ)
sampSendOnfootData(data) -- отправляем пакет с заполненой структурой
freeMemory(data) -- очищаем память
 
  • Нравится
Реакции: Rei и Dmitriy Makarov

Dmitriy Makarov

25.05.2021
Автор темы
Проверенный
2,500
1,131
Lua:
-- для ЛКМ
local _, myId = sampGetPlayerIdByCharHandle(playerPed) -- получаем свой ID
local data = allocateMemory(68) -- выделяем память под структуру
sampStorePlayerOnfootData(myId, data) -- готовим структуру для записи значений в нее
setStructElement(data, 4, 2, 4, false) -- data (наша структура), 4 (оффсет в структуре), 2 (sKeys имеет тип uint16_t, поэтому 2 байта), 4 (клавиша ЛКМ)
sampSendOnfootData(data) -- отправляем пакет с заполненой структурой
freeMemory(data) -- очищаем память

-- для ПКМ

local _, myId = sampGetPlayerIdByCharHandle(playerPed) -- получаем свой ID
local data = allocateMemory(68) -- выделяем память под структуру
sampStorePlayerOnfootData(myId, data) -- готовим структуру для записи значений в нее
setStructElement(data, 4, 2, 128, false) -- data (наша структура), 4 (оффсет в структуре), 2 (sKeys имеет тип uint16_t, поэтому 2 байта), 128 (клавиша ПКМ)
sampSendOnfootData(data) -- отправляем пакет с заполненой структурой
freeMemory(data) -- очищаем память
Он примерно так же работает.)
С задержкой в 300мс пару раз приходится самому нажимать, ибо скрипт не реагирует.
 

_razor

t.me/sssecretway | ТГК: t.me/razor_code
Всефорумный модератор
1,948
3,211
Он примерно так же работает.)
С задержкой в 300мс пару раз приходится самому нажимать, ибо скрипт не реагирует.
Ну так правильно, ты ставишь задержку в хуке и он перестает работать из-за задержки
 
  • Нравится
Реакции: Dmitriy Makarov

Dmitriy Makarov

25.05.2021
Автор темы
Проверенный
2,500
1,131
Ну так правильно, ты ставишь задержку в хуке и он перестает работать из-за задержки
Так без задержки вообще не работает..
Может я что-то не так делаю?
Lua:
function sampev.onDisplayGameText(style, time, text)
    if text:find("~w~Press ~r~~k~~PED_FIREWEAPON~") then     
            local _, myId = sampGetPlayerIdByCharHandle(playerPed) -- получаем свой ID
            local data = allocateMemory(68) -- выделяем память под структуру
            sampStorePlayerOnfootData(myId, data) -- готовим структуру для записи значений в нее
            setStructElement(data, 4, 2, 4, false) -- data (наша структура), 4 (оффсет в структуре), 2 (sKeys имеет тип uint16_t, поэтому 2 байта), 4 (клавиша ЛКМ)
            sampSendOnfootData(data) -- отправляем пакет с заполненой структурой
            freeMemory(data) -- очищаем память   
    elseif text:find("~w~Press ~g~~k~~PED_LOCK_TARGET~") then
            local _, myId = sampGetPlayerIdByCharHandle(playerPed) -- получаем свой ID
            local data = allocateMemory(68) -- выделяем память под структуру
            sampStorePlayerOnfootData(myId, data) -- готовим структуру для записи значений в нее
            setStructElement(data, 4, 2, 128, false) -- data (наша структура), 4 (оффсет в структуре), 2 (sKeys имеет тип uint16_t, поэтому 2 байта), 128 (клавиша ПКМ)
            sampSendOnfootData(data) -- отправляем пакет с заполненой структурой
            freeMemory(data) -- очищаем память
        
    end
end
 

_razor

t.me/sssecretway | ТГК: t.me/razor_code
Всефорумный модератор
1,948
3,211
Так без задержки вообще не работает..
Может я что-то не так делаю?
Lua:
function sampev.onDisplayGameText(style, time, text)
    if text:find("~w~Press ~r~~k~~PED_FIREWEAPON~") then    
            local _, myId = sampGetPlayerIdByCharHandle(playerPed) -- получаем свой ID
            local data = allocateMemory(68) -- выделяем память под структуру
            sampStorePlayerOnfootData(myId, data) -- готовим структуру для записи значений в нее
            setStructElement(data, 4, 2, 4, false) -- data (наша структура), 4 (оффсет в структуре), 2 (sKeys имеет тип uint16_t, поэтому 2 байта), 4 (клавиша ЛКМ)
            sampSendOnfootData(data) -- отправляем пакет с заполненой структурой
            freeMemory(data) -- очищаем память  
    elseif text:find("~w~Press ~g~~k~~PED_LOCK_TARGET~") then
            local _, myId = sampGetPlayerIdByCharHandle(playerPed) -- получаем свой ID
            local data = allocateMemory(68) -- выделяем память под структуру
            sampStorePlayerOnfootData(myId, data) -- готовим структуру для записи значений в нее
            setStructElement(data, 4, 2, 128, false) -- data (наша структура), 4 (оффсет в структуре), 2 (sKeys имеет тип uint16_t, поэтому 2 байта), 128 (клавиша ПКМ)
            sampSendOnfootData(data) -- отправляем пакет с заполненой структурой
            freeMemory(data) -- очищаем память
       
    end
end
Возможно у тебя большой пинг
 
  • Нравится
Реакции: Dmitriy Makarov