
18.09.2021, 14:26
|
|
Постоянный
Регистрация: 28.06.2018
Сообщений: 676
С нами:
4145990
Репутация:
118
|
|
Сообщение от vbg
Привет, хотел перевести на плюсы вот эту запись.
memory lua:
Код:
mem
.
setint8
(
0x969152
,
1
,
false
)
На с++ получилось что такое:
функция для записи в память:
Код:
template
void
writeMem
(
DWORD address
,
T value
)
{
DWORD oldProtect
=
0
;
VirtualProtectEx
(
GetCurrentProcess
(
)
,
(
void
*
)
address
,
sizeof
(
value
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProtect
)
;
WriteProcessMemory
(
GetCurrentProcess
(
)
,
(
void
*
)
address
,
&
value
,
sizeof
(
value
)
,
0
)
;
VirtualProtectEx
(
GetCurrentProcess
(
)
,
(
void
*
)
address
,
sizeof
(
value
)
,
oldProtect
,
NULL
)
;
}
дальше вызываю в коде:
вызов функции в коде:
Код:
unsigned
char
driveOnWater
=
1
;
writeMem
(
0x969152
,
driveOnWater
)
;
Ну и не работает кароче. Изменяю память в цикле.
unsigned char driveOnWater = 1;
*reinterpret_cast(0x969152) = driveOnWater;
попробуй
|
|
|

18.09.2021, 14:37
|
|
Флудер
Регистрация: 10.08.2017
Сообщений: 2,659
С нами:
4609424
Репутация:
183
|
|
Сообщение от vbg
Привет, хотел перевести на плюсы вот эту запись.
memory lua:
Код:
mem
.
setint8
(
0x969152
,
1
,
false
)
На с++ получилось что такое:
функция для записи в память:
Код:
template
void
writeMem
(
DWORD address
,
T value
)
{
DWORD oldProtect
=
0
;
VirtualProtectEx
(
GetCurrentProcess
(
)
,
(
void
*
)
address
,
sizeof
(
value
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProtect
)
;
WriteProcessMemory
(
GetCurrentProcess
(
)
,
(
void
*
)
address
,
&
value
,
sizeof
(
value
)
,
0
)
;
VirtualProtectEx
(
GetCurrentProcess
(
)
,
(
void
*
)
address
,
sizeof
(
value
)
,
oldProtect
,
NULL
)
;
}
дальше вызываю в коде:
вызов функции в коде:
Код:
unsigned
char
driveOnWater
=
1
;
writeMem
(
0x969152
,
driveOnWater
)
;
Ну и не работает кароче. Изменяю память в цикле.
Сообщение от vbg
mem.setint8(0x969152, 1, false)
последний аргумент -- false, соответственно протекцию снимать не нужно.
Значит, тебе достаточно просто использовать это:
C++:
Код:
*
reinterpret_cast
(
0x969152
)
=
1
;
А так, если ты хочешь повторить код как на луа:
C++:
Код:
template
void
writeMem
(
uintptr_t address
,
T value
,
bool
unprotect
=
false
)
{
DWORD old_protection
;
auto
address_
=
reinterpret_cast
(
address
)
;
if
(
unprotect
)
VirtualProtect
(
address_
,
sizeof
(
value
)
,
PAGE_EXECUTE_READWRITE
,
&
old_protection
)
;
memcpy
(
&
value
,
address_
,
sizeof
(
value
)
)
;
if
(
unprotect
)
VirtualProtect
(
address_
,
sizeof
(
value
)
,
old_protection
,
&
old_protection
)
;
}
|
|
|

18.09.2021, 15:25
|
|
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами:
4272230
Репутация:
183
|
|
Сообщение от #Northn
последний аргумент -- false, соответственно протекцию снимать не нужно.
Значит, тебе достаточно просто использовать это:
C++:
Код:
*
reinterpret_cast
(
0x969152
)
=
1
;
А так, если ты хочешь повторить код как на луа:
C++:
Код:
template
void
writeMem
(
uintptr_t address
,
T value
,
bool
unprotect
=
false
)
{
DWORD old_protection
;
auto
address_
=
reinterpret_cast
(
address
)
;
if
(
unprotect
)
VirtualProtect
(
address_
,
sizeof
(
value
)
,
PAGE_EXECUTE_READWRITE
,
&
old_protection
)
;
memcpy
(
&
value
,
address_
,
sizeof
(
value
)
)
;
if
(
unprotect
)
VirtualProtect
(
address_
,
sizeof
(
value
)
,
old_protection
,
&
old_protection
)
;
}
Ты в value записуешь байты из _address?
|
|
|

18.09.2021, 15:27
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от vbg
Привет, хотел перевести на плюсы вот эту запись.
memory lua:
Код:
mem
.
setint8
(
0x969152
,
1
,
false
)
На с++ получилось что такое:
функция для записи в память:
Код:
template
void
writeMem
(
DWORD address
,
T value
)
{
DWORD oldProtect
=
0
;
VirtualProtectEx
(
GetCurrentProcess
(
)
,
(
void
*
)
address
,
sizeof
(
value
)
,
PAGE_EXECUTE_READWRITE
,
&
oldProtect
)
;
WriteProcessMemory
(
GetCurrentProcess
(
)
,
(
void
*
)
address
,
&
value
,
sizeof
(
value
)
,
0
)
;
VirtualProtectEx
(
GetCurrentProcess
(
)
,
(
void
*
)
address
,
sizeof
(
value
)
,
oldProtect
,
NULL
)
;
}
дальше вызываю в коде:
вызов функции в коде:
Код:
unsigned
char
driveOnWater
=
1
;
writeMem
(
0x969152
,
driveOnWater
)
;
Ну и не работает кароче. Изменяю память в цикле.
C++:
Код:
template
void
WriteMemory
(
std
::
uintptr_t address
,
T value
,
bool
protect
=
true
)
{
unsigned
long
oldProt
;
if
(
protect
)
VirtualProtect
(
reinterpret_cast
(
address
)
,
sizeof
(
T
)
,
0x04
,
&
oldProt
)
;
*
reinterpret_cast
(
address
)
=
value
;
if
(
protect
)
VirtualProtect
(
reinterpret_cast
(
address
)
,
sizeof
(
T
)
,
oldProt
,
&
oldProt
)
;
}
Usage:
C++:
Код:
WriteMemory
(
0x969152
,
'\x01'
)
;
|
|
|

22.09.2021, 14:35
|
|
Новичок
Регистрация: 26.06.2021
Сообщений: 25
С нами:
2570124
Репутация:
8
|
|
Как сделать рендер объектов как на скрине в asi?
sa-mp-093-min.pngSilence Scripts · 22 Сен 2021 в 13:35' data-fancybox="lb-post-847848" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/115211/" style="cursor: pointer;" title="sa-mp-093-min.png">

sa-mp-094-min.pngSilence Scripts · 22 Сен 2021 в 13:35' data-fancybox="lb-post-847848" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/115212/" style="cursor: pointer;" title="sa-mp-094-min.png">

|
|
|

24.09.2021, 22:30
|
|
Постоянный
Регистрация: 24.07.2017
Сообщений: 867
С нами:
4633764
Репутация:
148
|
|
Всем ку, у кого-то есть аналог convertGameScreenCoordsToWindowScreenCoords из lua?
|
|
|

24.09.2021, 22:34
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от loganhackerdff
Всем ку, у кого-то есть аналог convertGameScreenCoordsToWindowScreenCoords из lua?
C++:
Код:
constexpr
auto
kRwEngineScreenW
=
0x00C17044
;
constexpr
auto
kRwEngineScreenH
=
0x00C17048
;
constexpr
auto
kGameScreenW
=
640.f
;
constexpr
auto
kGameScreenH
=
448.f
;
Vec2
gameScreenToWindow
(
Vec2 point
)
{
const
int
sx
=
*
reinterpret_cast
(
kRwEngineScreenW
)
;
const
int
sy
=
*
reinterpret_cast
(
kRwEngineScreenH
)
;
Vec2 result
{
}
;
result
.
x
=
(
point
.
x
/
kGameScreenW
)
*
sx
;
result
.
y
=
(
point
.
y
/
kGameScreenH
)
*
sy
;
return
result
;
}
|
|
|

24.09.2021, 22:40
|
|
Постоянный
Регистрация: 24.07.2017
Сообщений: 867
С нами:
4633764
Репутация:
148
|
|
Сообщение от kin4stat
C++:
Код:
constexpr
auto
kRwEngineScreenW
=
0x00C17044
;
constexpr
auto
kRwEngineScreenH
=
0x00C17048
;
constexpr
auto
kGameScreenW
=
640.f
;
constexpr
auto
kGameScreenH
=
448.f
;
Vec2
gameScreenToWindow
(
Vec2 point
)
{
const
int
sx
=
*
reinterpret_cast
(
kRwEngineScreenW
)
;
const
int
sy
=
*
reinterpret_cast
(
kRwEngineScreenH
)
;
Vec2 result
{
}
;
result
.
x
=
(
point
.
x
/
kGameScreenW
)
*
sx
;
result
.
x
=
(
point
.
y
/
kGameScreenH
)
*
sy
;
return
result
;
}
id текстдравов улетают в лево вверх
C++:
Код:
auto
onScreenPos
{
gameScreenToWindow
(
{
pTextdraw
->
m_data
.
m_fX
,
pTextdraw
->
m_data
.
m_fY
}
)
}
;
ImGui
::
GetForegroundDrawList
(
)
->
AddText
(
{
onScreenPos
.
x
,
onScreenPos
.
y
}
,
0xFFFFFFFF
,
tos
(
i
)
)
;
kGameScreenW и kGameScreenH попробовал заменить, не помогли
|
|
|

25.09.2021, 01:28
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от loganhackerdff
id текстдравов улетают в лево вверх
C++:
Код:
auto
onScreenPos
{
gameScreenToWindow
(
{
pTextdraw
->
m_data
.
m_fX
,
pTextdraw
->
m_data
.
m_fY
}
)
}
;
ImGui
::
GetForegroundDrawList
(
)
->
AddText
(
{
onScreenPos
.
x
,
onScreenPos
.
y
}
,
0xFFFFFFFF
,
tos
(
i
)
)
;
kGameScreenW и kGameScreenH попробовал заменить, не помогли
как минимум там мой проеб в том, что result.x два раза подряд(уже исправил)
|
|
|

25.09.2021, 10:37
|
|
Постоянный
Регистрация: 24.07.2017
Сообщений: 867
С нами:
4633764
Репутация:
148
|
|
Сообщение от kin4stat
как минимум там мой проеб в том, что result.x два раза подряд(уже исправил)
блинб не заметил, всё отлично работает
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|