Что нового

Как выдернуть одно цифровое значение из игры?

Vadimmm0072

Новичок
Сообщения
36
Репутация
2
Версия AutoIt:v3.2.5.4 3.

Описание:
Как выдернуть одно цифровое значение из игры, или это мне уже нужно новую тему создать. Просто есть игра стрелялка, там показывает количество убитых игроков, и вот я хочу чтобы при каждом изменений на 1 этого значения производился звук. Возможно ли вообще такое?

Примечания:
 

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
Да, как игра называется?
Нет игры нет дальнейших рассуждений, а можно дать простой ответ - да.
Потому что AutoIT на самом деле может всё.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Потрашите память игры, на форуме есть примеры в разделе Разработка ботов
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
И если вдруг в теме будет хоть как-то упомянута игра, не забудьте переименовать тему в соответствии с правилами, иначе она будет закрыта.
 
Автор
V

Vadimmm0072

Новичок
Сообщения
36
Репутация
2
Покопавшись на форуме нашел вот это
Код:
#RequireAdmin
#include <NomadMemory.au3>
$ProcessName="nksp.exe"
$hp=0x10629d38
$pid=ProcessExists($ProcessName)
$ProcessMemory=_MemoryOpen($pid)
$hptemp=_MemoryRead($hp,$ProcessMemory,'float')
if @error Then MsgBox(0,0,"error")
MsgBox(0,0,$hptemp)


Подставил свои значения мне постоянно выдает ошибку!



P.S. Значение которое я ищу целое.
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
Наверное нет нужной UDF библиотеки
 
Автор
V

Vadimmm0072

Новичок
Сообщения
36
Репутация
2
А все спасибо) Все работает) Теперь мне нужно чтобы воспроизводился звуковой файл SoundPlay() при каждом изменении $hptemp.
 
Автор
V

Vadimmm0072

Новичок
Сообщения
36
Репутация
2
Теперь мне нужно чтобы воспроизводился звуковой файл SoundPlay() при каждом изменении $hptemp.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
Global $hptemp_old = -1 ;глобальная переменная в которой будет храниться "бывшее" значение $hptemp

Func CheckHP($hptemp) ;Обращаясь в функцию, передаем в нее текущее значение $hptemp
	If $hptemp = -1 Then ;если первый запуск
		$hptemp_old = $hptemp ;Для того чтобы корректно отработал первый запуск функции
	Else ;иначе проверяем изменилось ли значение $hptemp
		If $hptemp <> $hptemp_old Then SoundPlay(@WindowsDir & "\media\tada.wav",1) ;если изменилось играем звук
	EndIf
	$hptemp_old = $hptemp ;записываем текущее значение $hptemp в $hptemp_old чтобы в след раз сравнить новое текущее значение с предидущим.
EndFunc

Не тестировал, но работать должно.
 
Автор
V

Vadimmm0072

Новичок
Сообщения
36
Репутация
2
Не тестировал, но работать должно.

По идее должно... но не работает.

Код:
#include <NomadMemory.au3>
$ProcessName="KillingFloor.exe"
$hp=0x289A825C
$pid=ProcessExists($ProcessName)
$ProcessMemory=_MemoryOpen($pid)
$hptemp=_MemoryRead($hp,$ProcessMemory)
if @error Then MsgBox(0,0,"error")

Global $hptemp_old = -1 

Func CheckHP($hptemp) 
    If $hptemp = -1 Then 
        $hptemp_old = $hptemp
    Else 
        If $hptemp <> $hptemp_old Then SoundPlay(@WindowsDir & "\media\tada.wav",1) ;
    EndIf
    $hptemp_old = $hptemp 
EndFunc


Может здесь где то ошибка есть, или что не правильно?
 

Microteam

Осваивающий
Сообщения
74
Репутация
34
Код:
#include <NomadMemory.au3>
$ProcessName="KillingFloor.exe"
$hp=0x289A825C
$pid=ProcessExists($ProcessName)
$ProcessMemory=_MemoryOpen($pid)
$hptemp=_MemoryRead($hp,$ProcessMemory)
if @error Then MsgBox(0,0,"error")

Global $hptemp_old = -1 

Func CheckHP($hptemp) 
;;;;;;; ниже
    If $hptemp = -1 Then 
        $hptemp_old = $hptemp
    Else 
        If $hptemp <> $hptemp_old Then SoundPlay(@WindowsDir & "\media\tada.wav",1) ;
    EndIf
    $hptemp_old = $hptemp 
EndFunc


Смотри у тебя, если не сработает условие которое я отметил, то и не создается переменная $hptemp_old
. Ты задефинь её в начале, т.к ты точно не знаешь, сработает условие или нет... Вот:

Код:
#include <NomadMemory.au3>
$ProcessName="KillingFloor.exe"
$hp=0x289A825C
$pid=ProcessExists($ProcessName)
$ProcessMemory=_MemoryOpen($pid)
$hptemp=_MemoryRead($hp,$ProcessMemory)
if @error Then MsgBox(0,0,"error")

Global $hptemp_old = -1 

Func CheckHP($hptemp) 
;;;;;;; ниже
Local $hptemp_old;
    If $hptemp = -1 Then 
        $hptemp_old = $hptemp
    Else 
        If $hptemp <> $hptemp_old Then SoundPlay(@WindowsDir & "\media\tada.wav",1) ;
    EndIf
    $hptemp_old = $hptemp 
EndFunc
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Автор
V

Vadimmm0072

Новичок
Сообщения
36
Репутация
2
Я в этом языке новичек, как и в программировании в общем. Поэтому я не особо понимаю что не так и что нужно изменить :scratch:
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Посмотри справку и найди в ней
там чутка ниже пример... создай новый скрипт с таким же кодом как и в примере.

Далее у тебя в самом начале кода получится:
Код:
Example1()
Example2()

; example1
Func Example1()


Вот где
Код:
Example1()
- это вызов функции с именем "Example1"
А где
Код:
Func Example1()
- это и есть сама функция с именем Example1

Если разбирать твой код, то функцию саму ты описал:
Код:
Func CheckHP($hptemp)

но не вызвал... у тебя нет в коде строчки в виде:
Код:
CheckHP($hptemp)


Код:
#include <NomadMemory.au3>
$ProcessName="KillingFloor.exe"
$hp=0x289A825C
$pid=ProcessExists($ProcessName)
$ProcessMemory=_MemoryOpen($pid)
$hptemp=_MemoryRead($hp,$ProcessMemory)
if @error Then MsgBox(0,0,"error")

Global $hptemp_old = -1 
;~ Здесь мы вызываем функцию
CheckHP($hptemp) 
;~ Здесь мы описываем функцию
Func CheckHP($hptemp) 
    If $hptemp = -1 Then 
        $hptemp_old = $hptemp
    Else 
        If $hptemp <> $hptemp_old Then SoundPlay(@WindowsDir & "\media\tada.wav",1) ;
    EndIf
    $hptemp_old = $hptemp 
EndFunc
 
Автор
V

Vadimmm0072

Новичок
Сообщения
36
Репутация
2

Спасибо большое, все ясно и четко разъяснил :ok:
Все работает :smile:

Но вот почему то скрипт воспроизводиться всего один раз. :scratch:

Я сам немного доработал скрипт и в итоге у меня получилось вот это.

Код:
#include <NomadMemory.au3>
$ProcessName="KillingFloor.exe"
$hp=0x28E8825C
$pid=ProcessExists($ProcessName)
$ProcessMemory=_MemoryOpen($pid)
$hptemp=_MemoryRead($hp,$ProcessMemory)
if @error Then MsgBox(0,0,"error")

Global $hptemp_old = -1

Do
    CheckHP($hptemp) 
Until $hptemp_old = 250

Func CheckHP($hptemp)
    $hptemp=_MemoryRead($hp,$ProcessMemory)
	If $hptemp = -1 Then
        $hptemp_old = $hptemp
    Else
        If $hptemp <> $hptemp_old Then SoundPlay(@WindowsDir & "\media\tada.wav",1) ;
    EndIf
    $hptemp_old = $hptemp
EndFunc


Огромнейшее спасибо тем кто мне помогал! :IL_AutoIt_1:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Если до сих пор воспроизводится лишь 1 раз, то причиной этому то, что переменная $hptemp_old после отработки функции CheckHP получает значение 250.
 
Автор
V

Vadimmm0072

Новичок
Сообщения
36
Репутация
2
Если до сих пор воспроизводится лишь 1 раз, то причиной этому то, что переменная $hptemp_old после отработки функции CheckHP получает значение 250.

Да не все нормально работает) я рад! :IL_AutoIt_1:
 
Верх