HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #4011  
Старый 26.09.2019, 14:49
twixjr12s
Новичок
Регистрация: 20.09.2019
Сообщений: 17
С нами: 3499389

Репутация: 1
По умолчанию

Цитата:
Сообщение от CppRedCode  

Предлагаю использовать wcslen вместо strlen, дать нормальную нумерацию кейсам и убрать последнюю строчку кода. Не вижу в ней смысла.
смысл в том чтобы заблокировать ввод своего текста

Цитата:
Сообщение от _Vine_  

Попробуй использовать getDialog()->pText вместо Get/SetInputText
pText получает текст диалога, нужно получать input (введённый текст)
 
Ответить с цитированием

  #4012  
Старый 28.09.2019, 19:59
Gafask
Участник форума
Регистрация: 10.12.2018
Сообщений: 137
С нами: 3908139

Репутация: 23
По умолчанию

1.Как правильно выполнить проверку через if при работает с адресами памяти игры . Просто когда значение должно быть верным и должен выполнится код он не выполнятся . Я написал быстро код который приводит мой пример и описал все что там есть вроде . Типа если денег у меня 100 долларов то вывестись на экран подсказка в игре samp или gta sa типа у вас 100 долларов или что-то такое . А если не 100 то будет раз в 10 сек писаться типа не 100 долларов у вас . Но

проблема в том что когда денег ряльно 100 и даже если через CE ( Чит движок , Чит энерджи , cheat engine ) и поставить там 100 то это один хер не будет работать я уже замучился искать ответ . Спрашивать на форуме и мне там только администратор форума отвечает но он не понимает в чом проблема или не знает почему это так .

Если что я просто пример пример , это не адрес денег а адрес хер пойми чего ))) . Типа он равен 80 но его можно поменять через CE на 100 и один хер не чего не случится . И значение не будет обратно прыгать оно равно таму значению которое записал хоть 1 оно будет равно 1 всю игру . Это так к слову . Просто записал рандом адрес из моей фонотеки.


Вопрос.CPP:





Код:
#include 
#include 
#include "main.h"
void
__cdecl
MainThread
(
void
*
pArg
)
{
while
(
true
)
Sleep
(
1
)
;
{
if
(
$
==
100
)
// Проверка на то что $ = 100 и если оно верное ( true ) то выполнится код нижу.
{
Sleep
(
1
)
;
//Задержка 1 мс. Добавил чисто для безопасности шобы не было просадки , ну а вдруг нада .
AddMessageJumpQ
(
"Проверка выполнена и равна 100 . "
,
1500
,
NULL
,
false
)
;
//Выводит подсказку с текстом , ну это стандарт функция)
}
else
{
//Если $ не равна 100 то выполнится этот код ниже .
Sleep
(
10000
)
;
// Задержка 10 Сек.
AddMessageJumpQ
(
"Значение не 100"
,
1500
,
NULL
,
false
)
;
//Выводит подсказку с текстом , ну это стандарт функция)
}
}
}
BOOL WINAPI
DllMain
(
_In_ HINSTANCE hinstDLL
,
_In_ DWORD fdwReason
,
_In_ PVOID lpvReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
_beginthread
(
MainThread
,
NULL
,
nullptr
)
;
return
TRUE
;
}
// Проблема в том что когда $ равно в игре 100 но код не выполнятся , вобще хоть функцию хп 0 добавить она не выполнится .


Проблема в коде в том что проверка не проходит даже если оно равно 100 .

main.h:





Код:
DWORD Cped
=
*
(
DWORD
*
)
0xB6F5F0
;
// тут мы прочитали указатель на игрока ну адрес игрока типо .
DWORD ZZZ
=
(
Cped
+
0x756
)
;
// а это смещение адреса для денег , мы его прочитали и записали в $ ну или в что-то другое разницы нету вроде ) . Хоть в 1 .
#define FUNC_CMessages__AddMessageJumpQ 0x69F1E0
void
AddMessageJumpQ
(
PCHAR text
,
UINT time
,
USHORT flag
,
bool
bPreviousBrief
)
// Функция показа сообщения на экране.
{
(
(
void
(
__cdecl
*
)
(
PCHAR
,
UINT
,
USHORT
,
bool
)
)
FUNC_CMessages__AddMessageJumpQ
)
(
text
,
time
,
flag
,
bPreviousBrief
)
;
}
 
Ответить с цитированием

  #4013  
Старый 28.09.2019, 20:02
iAmerican
Постоянный
Регистрация: 17.02.2014
Сообщений: 611
С нами: 6438231

Репутация: 133


По умолчанию

Цитата:
Сообщение от gafaskara  

1.Как правильно выполнить проверку через if при работает с адресами памяти игры . Просто когда значение должно быть верным и должен выполнится код он не выполнятся . Я написал быстро код который приводит мой пример и описал все что там есть вроде . Типа если денег у меня 100 долларов то вывестись на экран подсказка в игре samp или gta sa типа у вас 100 долларов или что-то такое . А если не 100 то будет раз в 10 сек писаться типа не 100 долларов у вас . Но

проблема в том что когда денег ряльно 100 и даже если через CE ( Чит движок , Чит энерджи , cheat engine ) и поставить там 100 то это один хер не будет работать я уже замучился искать ответ . Спрашивать на форуме и мне там только администратор форума отвечает но он не понимает в чом проблема или не знает почему это так .


Вопрос.CPP:





Код:
#include 
#include 
#include "main.h"
void
__cdecl
MainThread
(
void
*
pArg
)
{
while
(
true
)
Sleep
(
1
)
;
{
if
(
$
==
100
)
// Проверка на то что $ = 100 и если оно верное ( true ) то выполнится код нижу.
{
Sleep
(
1
)
;
//Задержка 1 мс. Добавил чисто для безопасности шобы не было просадки , ну а вдруг нада .
AddMessageJumpQ
(
"Проверка выполнена и денег 100 . "
,
1500
,
NULL
,
false
)
;
//Выводит подсказку с текстом , ну это стандарт функция)
}
else
{
//Если $ не равна 100 то выполнится этот код ниже .
Sleep
(
10000
)
;
// Задержка 10 Сек.
AddMessageJumpQ
(
"Проверка на то что денег 100 не верно"
,
1500
,
NULL
,
false
)
;
//Выводит подсказку с текстом , ну это стандарт функция)
}
}
}
BOOL WINAPI
DllMain
(
_In_ HINSTANCE hinstDLL
,
_In_ DWORD fdwReason
,
_In_ PVOID lpvReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
_beginthread
(
MainThread
,
NULL
,
nullptr
)
;
return
TRUE
;
}
// Проблема в том что когда $ равно в игре 100 но код не выполнятся , вобще хоть функцию хп 0 добавить она не выполнится .


Проблема в коде в том что проверка не проходит даже если оно равно 100 .

main.h:





Код:
DWORD Cped
=
*
(
DWORD
*
)
0xB6F5F0
;
// тут мы прочитали указатель на игрока ну адрес игрока типо .
DWORD $
=
(
Cped
+
0x756
)
;
// а это смещение адреса для денег , мы его прочитали и записали в $ ну или в что-то другое разницы нету вроде ) . Хоть в 1 .
#define FUNC_CMessages__AddMessageJumpQ 0x69F1E0
void
AddMessageJumpQ
(
PCHAR text
,
UINT time
,
USHORT flag
,
bool
bPreviousBrief
)
// Функция показа сообщения на экране.
{
(
(
void
(
__cdecl
*
)
(
PCHAR
,
UINT
,
USHORT
,
bool
)
)
FUNC_CMessages__AddMessageJumpQ
)
(
text
,
time
,
flag
,
bPreviousBrief
)
;
}

0xB7CE50 - [dword] Деньги \\ - пробуй через это

и поменяй название перменной

P.s. а вообще у тебя цикл while постоянно идет

Писал в блокноте , может что то и не так , но суть думаю понятна будет

sad:





Код:
DWORD Cped
=
*
(
DWORD
*
)
0xB6F5F0
;
// тут мы прочитали указатель на игрока ну адрес игрока типо .
DWORD dwMoney
=
(
Cped
+
0x756
)
;
// а это смещение адреса для денег , мы его прочитали и записали в $ ну или в что-то другое разницы нету вроде ) . Хоть в 1 .
#define FUNC_CMessages__AddMessageJumpQ 0x69F1E0
void
AddMessageJumpQ
(
PCHAR text
,
UINT time
,
USHORT flag
,
bool
bPreviousBrief
)
// Функция показа сообщения на экране.
{
(
(
void
(
__cdecl
*
)
(
PCHAR
,
UINT
,
USHORT
,
bool
)
)
FUNC_CMessages__AddMessageJumpQ
)
(
text
,
time
,
flag
,
bPreviousBrief
)
;
}
void
__cdecl
MainThread
(
void
*
pArg
)
{
static
DWORD dwOldMoney
=
0
;
static
bool
_bInit
=
false
;
while
(
true
)
{
if
(
!
_bInit
)
{
dwOldMoney
=
(
Cped
+
0x756
)
;
// Или тот адресс который я кинул выше.
_bInit
=
true
;
}
if
(
dwOldMoney
!=
(
Cped
+
0x756
)
)
{
if
(
$
==
100
)
{
AddMessageJumpQ
(
"Проверка выполнена и денег 100 . "
,
1500
,
NULL
,
false
)
;
dwOldMoney
=
(
Cped
+
0x756
)
;
}
else
{
AddMessageJumpQ
(
"Проверка на то что денег 100 не верно"
,
1500
,
NULL
,
false
)
;
dwOldMoney
=
(
Cped
+
0x756
)
;
}
}
Sleep
(
100
)
;
}
}
 
Ответить с цитированием

  #4014  
Старый 28.09.2019, 20:26
twixjr12s
Новичок
Регистрация: 20.09.2019
Сообщений: 17
С нами: 3499389

Репутация: 1
По умолчанию

Как производить отладку SF скриптов через x32dbg?
 
Ответить с цитированием

  #4015  
Старый 29.09.2019, 00:01
Gafask
Участник форума
Регистрация: 10.12.2018
Сообщений: 137
С нами: 3908139

Репутация: 23
По умолчанию

Цитата:
Сообщение от iAmerican  

0xB7CE50 - [dword] Деньги \\ - пробуй через это
и поменяй название перменной

P.s. а вообще у тебя цикл while постоянно идет

Писал в блокноте , может что то и не так , но суть думаю понятна будет

sad:





Код:
DWORD Cped
=
*
(
DWORD
*
)
0xB6F5F0
;
// тут мы прочитали указатель на игрока ну адрес игрока типо .
DWORD dwMoney
=
(
Cped
+
0x756
)
;
// а это смещение адреса для денег , мы его прочитали и записали в $ ну или в что-то другое разницы нету вроде ) . Хоть в 1 .
#define FUNC_CMessages__AddMessageJumpQ 0x69F1E0
void
AddMessageJumpQ
(
PCHAR text
,
UINT time
,
USHORT flag
,
bool
bPreviousBrief
)
// Функция показа сообщения на экране.
{
(
(
void
(
__cdecl
*
)
(
PCHAR
,
UINT
,
USHORT
,
bool
)
)
FUNC_CMessages__AddMessageJumpQ
)
(
text
,
time
,
flag
,
bPreviousBrief
)
;
}
void
__cdecl
MainThread
(
void
*
pArg
)
{
static
DWORD dwOldMoney
=
0
;
static
bool
_bInit
=
false
;
while
(
true
)
{
if
(
!
_bInit
)
{
dwOldMoney
=
(
Cped
+
0x756
)
;
// Или тот адресс который я кинул выше.
_bInit
=
true
;
}
if
(
dwOldMoney
!=
(
Cped
+
0x756
)
)
{
if
(
$
==
100
)
{
AddMessageJumpQ
(
"Проверка выполнена и денег 100 . "
,
1500
,
NULL
,
false
)
;
dwOldMoney
=
(
Cped
+
0x756
)
;
}
else
{
AddMessageJumpQ
(
"Проверка на то что денег 100 не верно"
,
1500
,
NULL
,
false
)
;
dwOldMoney
=
(
Cped
+
0x756
)
;
}
}
Sleep
(
100
)
;
}
}

Неа , 0 эмоции . Я если что в том коде который кидал там есть пару косяков и недочетов . Но смысл вроде я донес . По логике цикл бесконечный лаги не вызывает у меня и работает стабильно . И по логике если цикл бесконечный то он проверяет всегда эту = или нет ( я про if ) , мне просто не понятно почему при считывании из памяти игры и потом проверки это значения толку 0 . Я хотел это реализовать типа проверку координат игрока и потом уже выполнение кода типа если ровно то это а если нет то будет то-то выполнено , а когда я вроде проверяю и значение одинаковы толку 0 . Я даже ставил промежуток между этими значениями типа проверку между 1 и 4 ( типа если равно 1 или 2 или 3 или 4) то код выполнится но нет . Ну у меня были предположение что иза того что значение флоат и типа оно плавает ( проще говоря с точкой ) то тогда можно же выполнить проверку денег и если оно верно то вывести на экран но и это тоже не хочет . Типа сама проблема в том что у меня не получается сделать проверку значения из адреса памяти ( if как будто его не читает ) . Код который ты дал я поправил ( там был старый мой косяк , указатели были не все заменены ) и вгрызся в игру ( заинжектил) то не чего не показало ( там должно было высветится типа подсказки ) . Потом поставив через CE значение на 100 и там и там и поменяв на 1-4 байт то толку не было ( менял для того что-бы убедится что точно не работает ) .
 
Ответить с цитированием

  #4016  
Старый 29.09.2019, 08:29
CleanLegend
Постоянный
Регистрация: 28.03.2013
Сообщений: 495
С нами: 6908018

Репутация: 213
По умолчанию

Цитата:
Сообщение от gafaskara  

1.Как правильно выполнить проверку через if при работает с адресами памяти игры .
Попробуй так.

C++:





Код:
0xB7CE50
-
адрес денег
if
(
*
(
DWORD
*
)
0xB7CE50
==
100
)


Еще можешь использовать вот этот плагин для логирований значений - https://blast.hk/threads/22179/
 
Ответить с цитированием

  #4017  
Старый 29.09.2019, 10:10
twixjr12s
Новичок
Регистрация: 20.09.2019
Сообщений: 17
С нами: 3499389

Репутация: 1
По умолчанию

как сделать shadow by pass? как я понял в ShadowPlay можно не записывать рабочий стол и скрипт запускается от имени explorer'a или самого shadowplay, no kak?
 
Ответить с цитированием

  #4018  
Старый 29.09.2019, 15:08
Gafask
Участник форума
Регистрация: 10.12.2018
Сообщений: 137
С нами: 3908139

Репутация: 23
По умолчанию

Цитата:
Сообщение от CleanLegend  

Попробуй так.

C++:





Код:
0xB7CE50
-
адрес денег
if
(
*
(
DWORD
*
)
0xB7CE50
==
100
)


Еще можешь использовать вот этот плагин для логирования значений - https://blast.hk/threads/22179/
2.Cпасибо заработало , лайк поставил . А не подскажешь как можно еще реализовать это с 1-2 смещениями ? ( смещения адреса памяти )
 
Ответить с цитированием

  #4019  
Старый 29.09.2019, 16:56
CleanLegend
Постоянный
Регистрация: 28.03.2013
Сообщений: 495
С нами: 6908018

Репутация: 213
По умолчанию

Цитата:
Сообщение от gafaskara  

2.Cпасибо заработало , лайк поставил . А не подскажешь как можно еще реализовать это с 1-2 смещениями ? ( смещения адреса памяти )
Цитата:
Сообщение от gafaskara  

Вопрос.CPP:





Код:
#include 
#include 
#include "main.h"
void
__cdecl
MainThread
(
void
*
pArg
)
{
while
(
true
)
Sleep
(
1
)
;
{
if
(
$
==
100
)
// Проверка на то что $ = 100 и если оно верное ( true ) то выполнится код нижу.
{
Sleep
(
1
)
;
//Задержка 1 мс. Добавил чисто для безопасности шобы не было просадки , ну а вдруг нада .
AddMessageJumpQ
(
"Проверка выполнена и равна 100 . "
,
1500
,
NULL
,
false
)
;
//Выводит подсказку с текстом , ну это стандарт функция)
}
else
{
//Если $ не равна 100 то выполнится этот код ниже .
Sleep
(
10000
)
;
// Задержка 10 Сек.
AddMessageJumpQ
(
"Значение не 100"
,
1500
,
NULL
,
false
)
;
//Выводит подсказку с текстом , ну это стандарт функция)
}
}
}


main.h:





Код:
DWORD Cped
=
*
(
DWORD
*
)
0xB6F5F0
;
// тут мы прочитали указатель на игрока ну адрес игрока типо .
DWORD ZZZ
=
(
Cped
+
0x756
)
;
// а это смещение адреса для денег , мы его прочитали и записали в $ ну или в что-то другое разницы нету вроде ) . Хоть в 1 .

Выше в коде ты передаешь не адрес, а значение, получается $ у тебя имеет константу, которая задается один раз при инициализации, а при инициализации игры она скорее всего 0.

Можно сделать сразу так:

C++:





Код:
if
(
*
(
DWORD
*
)
(
0xB6F5F0
+
0x756
)
==
100
)


Либо передать указатель и потом его использовать из свое переменной:

C++:





Код:
DWORD
*
money
=
(
DWORD
*
)
(
0xB6F5F0
+
0x756
)
if
(
(
DWORD
*
)
money
==
100
)
 
Ответить с цитированием

  #4020  
Старый 29.09.2019, 20:57
Gafask
Участник форума
Регистрация: 10.12.2018
Сообщений: 137
С нами: 3908139

Репутация: 23
По умолчанию

Цитата:
Сообщение от CleanLegend  

Выше в коде ты передаешь не адрес, а значение, получается $ у тебя имеет константу, которая задается один раз при инициализации, а при инициализации игры она скорее всего 0.

Можно сделать сразу так:

C++:





Код:
if
(
*
(
DWORD
*
)
(
0xB6F5F0
+
0x756
)
==
100
)


Либо передать указатель и потом его использовать из свое переменной:

C++:





Код:
DWORD
*
money
=
(
DWORD
*
)
(
0xB6F5F0
+
0x756
)
if
(
(
DWORD
*
)
money
==
100
)

Вроде написал все верно , проверил но почему значение не верное (( не true) код уходит всегда на else ). Написал без указателей .

Отрывок кода.cpp:





Код:
#include 
// тут мы подгрузили инелуиды для работы всего что ниже есть .
#include 
// тут мы подгрузили инелуиды для работы всего что ниже есть .
#include "main.h"
// в main.h лежит сама функция (внутрености я хз как называются )-AddMessageJumpQ
#define VK_Z 0x5A
// Индификатор для красоты что-бы конпка VK_Z была красивее а не прросто 0x5A , и понятно будет что это конпка Z
void
__cdecl
MainThread
(
void
*
pArg
)
//  cтандарт
{
while
(
true
)
{
//тут цикл бесконечный (лагов нет)
if
(
GetAsyncKeyState
(
VK_CONTROL
)
&&
GetAsyncKeyState
(
VK_Z
)
)
{
// проверка на то что нажата кнопки CTR и Z
if
(
*
(
float
*
)
(
(
(
0xB6F5F0
)
+
0x14
)
+
0x30
)
==
1903.640259f
)
{
// там я написал float а DWORD это 4 байт вроде как и он не подходит в моем случаее.
AddMessageJumpQ
(
"VERNO"
,
1500
,
NULL
,
false
)
;
// Функция вывода подсказки или субритров если их так можно называть в самом сампе
Sleep
(
100
)
;
// зажерка а дальше все ясно , я так подумал вы и так все знаете ))))))).
}
else
{
AddMessageJumpQ
(
"NE-ROBIT-IDI-DUMAI"
,
1500
,
NULL
,
false
)
;
Sleep
(
100
)
;
}
}
}
}
BOOL WINAPI
DllMain
(
_In_ HINSTANCE hinstDLL
,
_In_ DWORD fdwReason
,
_In_ PVOID lpvReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
_beginthread
(
MainThread
,
NULL
,
nullptr
)
;
return
TRUE
;
}


(я комментарии к коду пишу , если не надо то не буду больше . )

По логике все должно работать но почему то не хочет . И если я тебя понял если оно равно 0 при запуске игры и вить там цикл идет оно его всегда чекает каждый раз без остановки ( ну если не добавить проверка на клавиши ) или я вообще не понял того что ты сказал , но как мне кажется понял .

И насчет того asi плагина , не понимаю как он работает но при запуске сампа не чего не появляться или как мне кажется его надо в сингле юзать ?
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Создать сделку

Продавец: ник или ID

Название сделки:

Сумма USDT:

Срок сделки, дней:

Кто платит комиссию:

Условия сделки:

После создания сделки средства будут зарезервированы в холде до завершения сделки.

×

Мои сделки

Загрузка...
×

Сделка


Загрузка чата...
×

ESCROW ADMIN PANEL

Загрузка...
Загрузка...