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

  #1  
Старый 26.09.2019, 13:00
rraggerr
Познавший АНТИЧАТ
Регистрация: 16.03.2017
Сообщений: 1,626
С нами: 4821087

Репутация: 133


По умолчанию

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

Ошибка пикрелейтед, sf-plugin. Возникает от случая к случаю. Обычно после 10-20 минут работы цикла в отдельном потоке. Раскрыть код, увы, не могу. Могу лишь подчеркнуть, что это обычный бесконечный цикл, в котором вызываются некоторые функции. Есть ли какие-нибудь решения этого недоразумения, за исключением переноса цикла в мэйнлуп?


Через сампфункс нельзя создавать потоки вообще, колхозь с таймерами
 
Ответить с цитированием

  #2  
Старый 26.09.2019, 14:29
ALF
Постоянный
Регистрация: 14.11.2017
Сообщений: 319
С нами: 4472205

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

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

Ошибка пикрелейтед, sf-plugin. Возникает от случая к случаю. Обычно после 10-20 минут работы цикла в отдельном потоке. Раскрыть код, увы, не могу. Могу лишь подчеркнуть, что это обычный бесконечный цикл, в котором вызываются некоторые функции. Есть ли какие-нибудь решения этого недоразумения, за исключением переноса цикла в мэйнлуп?


Ты создаёшь поток в mainloop? Если да, то это не лучший вариант, создавай его в DLL_PROCESS_ATTACH
 
Ответить с цитированием

  #3  
Старый 26.09.2019, 14:32
astap_
Постоянный
Регистрация: 05.03.2014
Сообщений: 626
С нами: 6415078

Репутация: 163


По умолчанию

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

Ты создаёшь поток в mainloop? Если да, то это не лучший вариант, создавай его в DLL_PROCESS_ATTACH
в теле команды. спасибо, буду пробовать.
 
Ответить с цитированием

  #4  
Старый 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
)
;
}
 
Ответить с цитированием

  #5  
Старый 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
)
;
}
}
 
Ответить с цитированием

  #6  
Старый 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 байт то толку не было ( менял для того что-бы убедится что точно не работает ) .
 
Ответить с цитированием

  #7  
Старый 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/
 
Ответить с цитированием

  #8  
Старый 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 смещениями ? ( смещения адреса памяти )
 
Ответить с цитированием

  #9  
Старый 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
)
 
Ответить с цитированием

  #10  
Старый 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.

×

Внести депозит

Введите сумму USDT:

Принимается только USDT TRC20. Fake/Flash USDT не засчитывается.

×

Вывести депозит

Сумма USDT:

Ваш USDT TRC20 кошелек:

Заявка будет отправлена администратору.