Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Количество нажатий send ограничено FPS в клиенте
Sheeck
сообщение 21.3.2021, 14:32
Сообщение #1


**

Neophyte
Сообщений: 36
Регистрация: 5.8.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.174
Возраст: 29



Здравствуйте написал простенький скрипт

repeat 20
send217 d1234536d123345d123453
send217 673890d12345-=
send217 {num_/}
send217 {num_*}
end_repeat

скрипт нужен для спама по скилам, чем быстрее тем лучше, проблема заключается в том, что на быстрой машине этот скрипт обрабатывается за примерно 10сек, а на более слабой и под сильной нагрузкой может достигать до 40-50сек. изза этого нарушаются тайминги в скрипте, не возможно определить сколько именно по времени будет выполняться определенная часть в скрипте с нажатиями.
Есть ли возможность чтобы пилот не учитывал производительность клиента в который отправляются нажатия, а просто проспамливал этот кусок скрипта даже если часть из этих нажатий изза низкого фпс в игре будет игнорироваться, но при этом общее время исполнения скрипта будет всегда одинаковым, независимо от нагрузки на комп?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 21.3.2021, 15:21
Сообщение #2


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
но при этом общее время исполнения скрипта будет всегда одинаковым, независимо от нагрузки на комп?

Даже без нагрузки скрипт будет выполняться разное количество времени на разных процесоорах.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sheeck
сообщение 21.3.2021, 15:23
Сообщение #3


**

Neophyte
Сообщений: 36
Регистрация: 5.8.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.174
Возраст: 29



Цитата(cirus @ 21.3.2021, 15:21) *

Нет.

вообще никак не зафиксить это? должен же быть параметр который отключает проверку на то прошло нажатие в клиент или нет, как к примеру мышка может спамить по клиенту с 1фпс по 1000 нажатий в секунду, или тот же ахк скрипт
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 21.3.2021, 15:41
Сообщение #4


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
должен же быть параметр который отключает проверку

Нет никаких проверок. Чем быстрее проц, тем быстрее обрабатывается скрипт. Фпс на клики и нажатия клавиш вообще никак не влияет.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sheeck
сообщение 21.3.2021, 16:09
Сообщение #5


**

Neophyte
Сообщений: 36
Регистрация: 5.8.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.174
Возраст: 29



Цитата(cirus @ 21.3.2021, 15:41) *

Нет никаких проверок. Чем быстрее проц, тем быстрее обрабатывается скрипт. Фпс на клики и нажатия клавиш вообще никак не влияет.

влияет, если принудительно снизить фпс клиента до 1ед, либо просто сделать окно клиента неактивным в фоне, то скрипт вообще может 2 минуты эти команды обрабатывать, даже если нагрузка на проц 30% а не 100%

и этот же скрипт при полной нагрузке на проц по блокноту отрабатывает эти нажатия раз в 100 быстрее, т.к. у блокнота фпс под 1000
а если отвязать скрипт от клиента игры и запустить его то вся эта часть скрипта с нажатиями обработается за 1секунду даже при полной нагрузке на проц

отсюда и возникает ощущение что после каждого нажатия в клиент, пилот ждет какойто ответ либо выставляют какуюто задержку основываясь на производительности клиента

можете на самом деле все это проверить сами
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 21.3.2021, 16:48
Сообщение #6


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
пилот ждет какойто ответ

Ждёт ответ от приложения, когда будет обработано сообщение.
Так быстрее будет?:
Код
[/code]
[code]--lua
local ffi = require("ffi")
log 'clear' log 'mode compact'
local WM_CHAR = 0x0102
ffi.cdef[[
    bool PostMessageA(int hWnd, int Msg, unsigned int wParam, unsigned int lParam);
    bool SendMessageA(int hWnd, int Msg, unsigned int wParam, unsigned int lParam);
]]

function _send (text)
    local h = workwindow()
    for s in string.gmatch(text, ".") do   -- цикл, ищет все слова в строке
        ffi.C.PostMessageA(h, WM_CHAR, s:byte(), 1)     -- не ждать ответ от приложения
--        ffi.C.SendMessageA(h, WM_CHAR, s:byte(), 1)   -- ждать ответ от приложения
    end
end


local t = os.clock()
for i=1, 20 do  -- повторить 20 раз
    _send('d1234536d123345d123453')
    _send('673890d12345-=')
end
log('Затрачено времени: ' .. tostring(os.clock()-t))
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sheeck
сообщение 21.3.2021, 16:53
Сообщение #7


**

Neophyte
Сообщений: 36
Регистрация: 5.8.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.174
Возраст: 29



[quote name='cirus' date='21.3.2021, 16:48' post='440170']
Ждёт ответ от приложения, когда будет обработано сообщение.
Так быстрее будет?:

напиши пожалуйста для send217 приложение просто сенд не воспринимает
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 21.3.2021, 17:48
Сообщение #8


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Цитата
напиши пожалуйста для send217 приложение просто сенд не воспринимает

Если б ещё знать как он реализован. Возможно так:
Код
--lua
local ffi = require("ffi")
log 'clear' log 'mode compact'
local WM_KEYDOWN = 0x0100
local WM_KEYUP = 0x0101
ffi.cdef[[
    bool PostMessageA(int hWnd, int Msg, unsigned int wParam, unsigned int lParam);
    short VkKeyScanA(char ch);
]]

function _send (text)
    local h = workwindow()
    for s in string.gmatch(text, ".") do   -- цикл, ищет все слова в строке
        local code = bit.band(ffi.C.VkKeyScanA(s:byte()), 0xff)
        ffi.C.PostMessageA(h, WM_KEYDOWN, code, 1)
        ffi.C.PostMessageA(h, WM_KEYUP, code, 1)  -- убрать эту строку если по два символа будет вводить
    end
end


local t = os.clock()
for i=1, 20 do  -- повторить 20 раз
    _send('d1234536d123345d123453')
    _send('673890d12345-=')
end
log('Затрачено времени: ' .. tostring(os.clock()-t))
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sheeck
сообщение 21.3.2021, 18:03
Сообщение #9


**

Neophyte
Сообщений: 36
Регистрация: 5.8.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.174
Возраст: 29



Цитата(cirus @ 21.3.2021, 17:48) *

Если б ещё знать как он реализован. Возможно так:


Затрачено времени: 0.0049999999999955
нажатия клавиш не проходят, проверил на блокноте пишет в логах
Затрачено времени: 0.017999999999972
в блокнот проходят

а есть возможность включить репит определенного блока нажатий на скажем 5-8с реальный по системному времени?

вот как у меня repeat 20
только было бы repeat_for_8000ms
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 21.3.2021, 19:07
Сообщение #10


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



Цитата
Есть ли возможность чтобы пилот не учитывал производительность клиента в который отправляются нажатия, а просто проспамливал этот кусок скрипта даже если часть из этих нажатий изза низкого фпс в игре будет игнорироваться, но при этом общее время исполнения скрипта будет всегда одинаковым, независимо от нагрузки на комп?

Он никогда и не подстраивался под фпс и ничего не учитывал.


Цитата
а есть возможность включить репит определенного блока нажатий на скажем 5-8с реальный по системному времени?

Код
--lua
local timeout = os.clock() + 8
while timeout > os.clock() do
    log(tostring(os.clock()))
    wait(1000)
end


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sheeck
сообщение 21.3.2021, 20:29
Сообщение #11


**

Neophyte
Сообщений: 36
Регистрация: 5.8.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.174
Возраст: 29



Цитата(DarkMaster @ 21.3.2021, 19:07) *

Он никогда и не подстраивался под фпс и ничего не учитывал.


а почему тогда получается так что в клиент с низким фпс спам нажатий очень долго исполняется? настолько большая разнциа что один и тотже скрипт может выполняться в разы дольше или быстрее
именно sned217 нажатия интересуют, ничего другого игра не воспринимает
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 22.3.2021, 3:17
Сообщение #12


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



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


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sheeck
сообщение 22.3.2021, 3:42
Сообщение #13


**

Neophyte
Сообщений: 36
Регистрация: 5.8.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.174
Возраст: 29



Цитата(DarkMaster @ 22.3.2021, 3:17) *

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

разработчик пилота? чет не совсем понял) вот бы просто заставить его выдавать определенное количество нажатий строго с заданным делеем, как мышка выдает макросом или как ахк скрипт спамит, им вообще до фонаря пример клиент их или не сможет обработать
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sheeck
сообщение 22.3.2021, 4:35
Сообщение #14


**

Neophyte
Сообщений: 36
Регистрация: 5.8.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.174
Возраст: 29



Цитата(cirus @ 21.3.2021, 17:48) *



а вот через пост похоже заработало причем спамит так что аж клиент зависает, если в 1 строчку несколько десятков нажатий впихнуть и wiat(1) поставить или 0, но это хорошо судя по всему это именно то что и нужно. Спасибо огромное. Еще вопрос а как через _send (который спамит не дожидаясь ответа) нам клавиши и ф1 ф2 отправить? и можно ли как то скрипт ужать? команды на лог вырезал но я слишком валенок чтобы понять что все остальное значит в обычном то пилоте не разбираюсь а тут еще луа
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 22.3.2021, 7:34
Сообщение #15


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



Цитата
разработчик пилота?

разработчик вашего приложения.
Цитата
клавиши и ф1 ф2 отправить

ffi.C.PostMessageA(h, WM_KEYDOWN, code, 1)
ffi.C.PostMessageA(h, WM_KEYUP, code, 1)
можете сюда напрямую вбить код клавиши.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sheeck
сообщение 22.3.2021, 10:56
Сообщение #16


**

Neophyte
Сообщений: 36
Регистрация: 5.8.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.174
Возраст: 29



Цитата(DarkMaster @ 22.3.2021, 7:34) *

разработчик вашего приложения.

ffi.C.PostMessageA(h, WM_KEYDOWN, code, 1)
ffi.C.PostMessageA(h, WM_KEYUP, code, 1)
можете сюда напрямую вбить код клавиши.


причем тут приложение если пилот во все приложение обычной командой send или send217 отправляет нажатие и время обработки скрипта пилотом напрямую зависит от производительности приложения, если его засуспендить то и скрипт в пилоте чуть ли не замирает а в какихто моментах пилот просто зависает пока приложение не разморозить, это не только этой игры касается я давно это и везде замечаю
разумеется я про обычные команды сенд в пилоте, без луа там и прочих махинаций

да команды работают спасибо, а до _send('num_1') както это можно ужать? вот как cirus сделал для обычный 12345 нажатий?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 22.3.2021, 11:14
Сообщение #17


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



Цитата
причем тут приложение если пилот во все приложение

Есть вин апи. В вин апи есть две функции - send и post. Send отправляет гарантированное нажатие с ожиданием ответа от приложения, что команда получена. Post - шлет вслепую, иногда это приводит к очень большим проблемам и непрогнозируемым сбоям скриптов. Пилот же лишь представляет интерфейс для работы с этими функциями. В нормально написанном приложении либо нет нагрузки, которая может заблокировать принятие эвента по нажатию клавиши (например, калькулятор), либо обработка эвентов вынесена в отдельный поток, чтобы не было блокировки. Держать в одном потоке эвенты и обрабатывать графику примерно тоже самое, что делать яйцо фаберже в кузове белаза, когда в него руду насыпают.
Цитата
а до _send('num_1') както это можно ужать?

создать таблицу ascii кодов с читаемым значением и добавить парсинг. Хотя как по мне, то проще отдельную функцию сделать под многосимвольные клавиши и выкинуть парсинг как таковой.
Либо вообще не заморачиваться, выкинуть парсинг, отсылать сразу коды клавиш.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 22.3.2021, 11:57
Сообщение #18


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



код
Код
--lua
local ffi = require("ffi")
log 'clear' log 'mode compact'
local WM_KEYDOWN = 0x0100
local WM_KEYUP = 0x0101
ffi.cdef[[
    bool PostMessageA(int hWnd, int Msg, unsigned int wParam, unsigned int lParam);
    short VkKeyScanA(char ch);
]]

-- таблица с кодами клавиш
-- добавить нужные клавиши
local VirtualKey = { ['num_1'] = 0x61,
                     ['num_2'] = 0x62,
                     ['F1'] = 0x70,
                     ['F2'] = 0x71
                    }

function _send (text)
    local h = workwindow()
    local code = text:match('%{(.+)%}') -- если в тексте есть фигурные скобки {}, то считается что надо нажать клавишу из таблицы
    if code then
        if VirtualKey[code] then  -- если в таблице есть нужный элемент
            ffi.C.PostMessageA(h, WM_KEYDOWN, VirtualKey[code], 1)
            ffi.C.PostMessageA(h, WM_KEYUP, VirtualKey[code], 1)
        else
            log('В таблице отсутствует клавиша: ' .. code)
        end
        return
    end

    for s in text:gmatch(".") do  -- отправить текст посимвольно
        local code = bit.band(ffi.C.VkKeyScanA(s:byte()), 0xff)
        ffi.C.PostMessageA(h, WM_KEYDOWN, code, 1)
        ffi.C.PostMessageA(h, WM_KEYUP, code, 1)  -- убрать эту строку если по два символа будет вводить
    end
end


_send('qwe123')   -- отправить текст
_send ('{num_2}')     -- нажать num2
_send ('{num_1}')     -- нажать num1
_send ('{F1}')        -- нажать f1


virtual-key-codes
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sheeck
сообщение 22.3.2021, 12:53
Сообщение #19


**

Neophyte
Сообщений: 36
Регистрация: 5.8.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.174
Возраст: 29



Цитата(cirus @ 22.3.2021, 11:57) *


шикарно, спасибо
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sheeck
сообщение 22.3.2021, 13:09
Сообщение #20


**

Neophyte
Сообщений: 36
Регистрация: 5.8.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.174
Возраст: 29



Цитата(DarkMaster @ 22.3.2021, 11:14) *

Есть вин апи

Так про взаимодействие с вин апи понял да, НО как раз таки пост не нарушает работу скрипта, ему просто пофиг даже если он огромным количеством отправок руинит приложение, только что попробовал без делеея поспамить, приложение зависло намертно, а вот сенд и ожидание ответа от приложения в вин апи и получение ответа от вин апи пилотом ломает посути выполнения скрипта, к примеру если идет отправка через сенд в приложение и оно зависает, вайтскрин, ну думаю на винде все знают что это, так вот, если приложение зависает то и скрипт в пилоте а иногда и сам пилот тоже намертво зависают, пока не закрыть приложение. для эксперемента написал на ахк простенький скрипт там есть и сенд и сендрав и сендинпат, с бесконечным циклом и спамом, запустил спамить кнопки в приложения, очевидно что оно тоже зависло, но вот скрипт по логам продолжает работать ему хоть бы хны, получается что все же пилот дожидается ответа от вин апи который в свою очередь ждет ответа от приложения о получении нажатия кнопки, а вот именно пост через пилот не руинит выполнение самого скрипта неважно что происходит с приложением, сразу оговорюсь это просто наблюдения я валенок и возможно где то затупил
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

2 страниц V  1 2 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 19.4.2024, 18:00
Designed by Nickostyle