Что нового

[Мышь, клавиатура] Управление координатами указателя мыши в Counter Strike Source

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Открываю эту тему и тут.
Цель - управление координатами указателя мыши (в игре - это прицел) в Counter Strike Source.
Для чего - кучность стрельбы (все пули , не зависимо от отдачи оружия, должны попасть в одну точку)
Как хотел реализовать - постоянным определением координат указателя мыши + если нажата (и удерживается) ЛКМ,
тогда координата указателя мыши постоянно приводится равной к ранее вычисленной в момент нажатия ЛКМ (ЛКМ - левая кнопка мыши)
пока ЛКМ не опустится.
Написал такой код:
Код:
#Include <Misc.au3>
While 1
Sleep (50)	
$pos = MouseGetPos() ; получить текущие координыты указателя мыши
ToolTip("Mouse x,y: "& $pos[0] & "," & $pos[1], 0, 0) ; вывести визуально эти координаты
If _IsPressed(01) = 1 Then	; если вдруг нажмем ЛКМ, - вызвать функцию "MyCoordinate"
	Call("MyCoordinate")
EndIf
WEnd

Func MyCoordinate()
	While _IsPressed(01) = 1 ; пока зажата ЛКМ выполнять
	Sleep (20)	
	MouseMove($pos[0], $pos[1], 1) ; устанавливать указатель мыши по этим координатам		
	WEnd
EndFunc

Однако данный код, хоть и работает практически везде, но не работает именно в самом процессе игры Counter Strike Source.
Из этого вопрос:
Как можно получать координаты указателя мыши в процессе самой этой игры + устанавливать свои координаты.
Т.е. есть ли альтернатива MouseGetPos и MouseMove в данном случае?
 

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
Ничего не выйдет :smile:
Сама игра через очень короткие моменты времени перемещает курсор в центр экрана. Бывает же баг, когда windows'ий курсор вылезает в игру поверх прицела, т.е. в центр экрана, и когда начинаешь перемещать курсор, то он сразу возвращается в центр экрана. По крайней мере у меня был такой баг в кс 1.6.
Лучше честно играть :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Просто берешь позицию, смотришь как она меняется от центра, поскольку игра постоянно устанавливает курсор в центр то изменения будут небольшие, но тебе хватит их чтобы определить в какую сторону идет курсор, далее ты просто в противоположенную сторону подвигаешь его на то количество на которое он рвался вверх.
 
Автор
Yuri

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Данный скрипт пишу безвозмездно, просто так, для интереса.
В Counter Strike еще ни разу в жизни реально по сетке не играл. Только с ботами.

"просто в противоположенную сторону подвигаешь его на то количество на которое он рвался вверх"

Как, если не могу мышью именно тут командовать?
Я думал проще реализовать - зажал ЛКМ, получил координаты указателя мыши и в цикле, пока зажата ЛКМ (стрельба)
ставить координаты указателя мыши в ранее полученные. Облом в том, что это не работает именно в процессе игры.
В общем надо как-то командовать указателем мыши именно в процессе игры. Тут видать защита стоит.
Хуки, говорят надо ставить, в таком случае. Не умею и не знаю как это сделать. Но я не отступаю:smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Сам в КС играл только когда школу прогуливал, поэтому как обходить тамошний гг я не в курсе, хотя люди говорят что ничего сложного :smile:
 
Автор
Yuri

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Да, уж.
Ошибочка вкралась.
Пардон.
Оказалось, что прицел постоянно находится на одном месте
- в середине экрана.Сама карта движется относительно прицела,
если мышь передвигать.
Блин, как я раньше не обратил на это внимание.
Что ж. С кем не бывает. Пересмотрю свой алгоритм.
Чем дальше, тем интереснее теперь.
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Yuriy [?]
Сама карта движется относительно прицела,
В том и проблема.

Мне предполагается следующий путь: запомнить несколько пикселей в центре экрана (рядом с прицелом) и потом смотреть на их смещение.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
Или вскрыть память на предмет ротации карты чара к карте
 
Автор
Yuri

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Опытным путем определил как командовать мышью в данном случае.
Пошел по пути наименьшего сопротивления.
В AutoIt пришел из Sign 0f Misery. Так вот в нем (Sign 0f Misery) и проверил.
Работает! Вот только давно очень я в Sign 0f Misery работал.
Однако синтаксис там сложноват (через 10 мин глянешь на свой код и .... ???)
Но все равно CyberManiac-у большой респект.
Пока еще не определился с алгоритмом.
Не сдаюсь
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Наверное, это слишком сложная задача. Если было бы возможно, то такой скрипт написали бы уже :smile:
 

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
Надо внедряться в процесс и уже в нём манипулировать прицелом. Так работают читы. К сожалению, с этим не имел дело, т.к. не знаю как это делается. Но давно хочу узнать, но не знаю с чего начать.
 

Ganibal95

GreenBytes
Сообщения
876
Репутация
239
Расчитаваеш цент экрана, это надо каждую сторону экрана поделить на 2...
при стрельбе чтоб он выравнивал его по центру...
1. если оружие при отдаче отклоняется в какой нибудь бок (П90 - вверх, покрайне мере в пб...) то нужно ставить +/- $n. $n - N число будет перемещение с координат указателя...
2.
Думаю это подойдет, сам отредактируй под себя...
Код:
#Include <Misc.au3>

$H = @DesktopHeight / 2
$W = @DesktopWidth / 2

;====Выравнивание=от=отдачи=====
$1 = 0 ; Отягивание прицела
$2 = 0.1 ; Отягиваем в низ по 0.1(При низких отдачах) пикселю
;===============================


While 1
	if _IsPressed(01) Then
		$W = $W + $1  ;=Может даже минус... это уже сами протестиш
		$H = $H + $2  ;=Может даже минус... это уже сами протестиш
		MouseMove($W,$H,1) 
		Else
		$H = @DesktopHeight / 2
        $W = @DesktopWidth / 2
	EndIf
WEnd
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 590
Репутация
938
MouseMove принимает только целые числа, 0.1 для него = 0
 
Верх