
14.09.2022, 21:45
|
|
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами:
3174020
Репутация:
213
|
|
Сообщение от MeG@LaDo[N] ^_^
какой хукер юзать/как хукнуть функцию игры x64?
minhook
kthook
polyhook
продолжать? можно просто загуглить
|
|
|

14.09.2022, 21:59
|
|
Участник форума
Регистрация: 21.07.2020
Сообщений: 280
С нами:
3059886
Репутация:
68
|
|
Сообщение от sc6ut
minhook
kthook
polyhook
продолжать? можно просто загуглить
продолжай.........
|
|
|

16.09.2022, 09:01
|
|
Участник форума
Регистрация: 28.07.2021
Сообщений: 138
С нами:
2524529
Репутация:
163
|
|
Ку прив, использую plugin-sdk, подскажите пожалуйста, как мне проверить на то, что объект коснулся чего угодно?
У меня обрабатывается это всё чудо в цикле, мне нужно, что-бы объект, когда косается чего-то, происходило действие, в данном случае удаление объекта, использовал z координату и проверял ее с 0.f, но мне кажется, что это неправильно, и я хочу понять, как мне сделать так, что-бы проверялось касание
C++:
[CODE]
if
(
obj
->
GetPosition
(
)
.
z
Для проверки объекта на касание использовал, ловил краш =)
C++:
Код:
// Crash
if
(
obj
->
TestCollision
(
)
)
{
// some actions...
}
|
|
|

17.09.2022, 13:57
|
|
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами:
4272230
Репутация:
183
|
|
Сообщение от sizeoftrickster
Ку прив, использую plugin-sdk, подскажите пожалуйста, как мне проверить на то, что объект коснулся чего угодно?
У меня обрабатывается это всё чудо в цикле, мне нужно, что-бы объект, когда косается чего-то, происходило действие, в данном случае удаление объекта, использовал z координату и проверял ее с 0.f, но мне кажется, что это неправильно, и я хочу понять, как мне сделать так, что-бы проверялось касание
C++:
Код:
if
(
obj
->
GetPosition
(
)
.
z
TestCollision
(
)
)
{
// some actions...
}
Хукни коллизию и доставай с esi/edi два касающихся объекта. kthook вполне с этим справится. Адрес можно найти в сурсах коллизии от фипа
|
|
|

19.09.2022, 18:57
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от sizeoftrickster
Ку прив, использую plugin-sdk, подскажите пожалуйста, как мне проверить на то, что объект коснулся чего угодно?
У меня обрабатывается это всё чудо в цикле, мне нужно, что-бы объект, когда косается чего-то, происходило действие, в данном случае удаление объекта, использовал z координату и проверял ее с 0.f, но мне кажется, что это неправильно, и я хочу понять, как мне сделать так, что-бы проверялось касание
C++:
Код:
if
(
obj
->
GetPosition
(
)
.
z
TestCollision
(
)
)
{
// some actions...
}
C++:
Код:
kthook
::
kthook_naked hook
{
0x54BCEE
}
;
hook
.
set_cb
(
[
]
(
const
kthook
::
kthook_naked
&
hook
)
{
auto
for_obj
=
reinterpret_cast
(
hook
.
get_context
(
)
.
esi
)
;
auto
with_obj
=
reinterpret_cast
(
hook
.
get_context
(
)
.
edi
)
;
/*
if (for_obj == my_obj || with_obj == my_obj) {
}
*/
}
)
;
hook
.
install
(
)
;
|
|
|

17.09.2022, 17:56
|
|
Участник форума
Регистрация: 05.05.2021
Сообщений: 244
С нами:
2645089
Репутация:
33
|
|
как сделать бег к координатам ?
|
|
|

18.09.2022, 07:52
|
|
Новичок
Регистрация: 19.06.2022
Сообщений: 14
С нами:
2055431
Репутация:
3
|
|
Сообщение от cort
как сделать бег к координатам ?
C++:
[CODE]
float
*
xCam
=
(
float
*
)
0xB6F258
;
DWORD
*
ptrActor
=
(
DWORD
*
)
0xB6F5F0
;
void
rotateCamToXY
(
float
x
,
float
y
)
{
DWORD
*
pActorMtrx
=
(
DWORD
*
)
(
(
*
ptrActor
)
+
0x14
)
;
CVector2D
pPos
(
*
(
float
*
)
(
(
*
pActorMtrx
)
+
0x30
)
,
*
(
float
*
)
(
(
*
pActorMtrx
)
+
0x34
)
)
;
CVector2D
cPos
(
*
(
float
*
)
(
0xB6F9CC
)
,
*
(
float
*
)
(
0xB6F9D0
)
)
;
float
ac
=
sqrt
(
pow
(
fabs
(
cPos
.
fX
-
x
)
,
2
)
+
pow
(
fabs
(
cPos
.
fY
-
y
)
,
2
)
)
;
float
alpha
=
asin
(
fabs
(
cPos
.
fX
-
x
)
/
ac
)
;
float
beta
=
acos
(
fabs
(
cPos
.
fX
-
x
)
/
ac
)
;
if
(
(
pPos
.
fX
>
x
)
&&
(
pPos
.
fY
x
)
&&
(
pPos
.
fY
>
y
)
)
*
xCam
=
beta
;
if
(
(
pPos
.
fX
y
)
)
*
xCam
=
(
alpha
+
(
1.57
)
)
;
if
(
(
pPos
.
fX
|
|
|

19.09.2022, 12:17
|
|
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами:
2055431
Репутация:
3
|
|
Сообщение от cort
как сделать бег к координатам ?
C++:
Код:
void
Camera
::
TurnToCoord
(
Vector3 vecObj
,
float
smooth
)
{
Vector3 playerPos
=
sdk
::
player
::
coordinate
(
)
;
Vector2 ViewAngle
=
sdk
::
camera
::
angle
(
)
;
Vector3 vec
=
vecObj
-
playerPos
;
Vector2 CameraAngle
=
Vector2
(
std
::
atan2
(
-
vec
.
Length2d
(
)
,
vec
.
z
)
*
0.1
,
std
::
atan2
(
-
vec
.
y
,
-
vec
.
x
)
)
;
Vector2 calcAngle
=
(
CameraAngle
-
ViewAngle
)
/
smooth
;
//чем больше смутч, тем плавнее
Utils
::
setCameraAngle
(
ViewAngle
+
calcAngle
)
;
}
Видел эту функцию на другом форуме
|
|
|

18.09.2022, 21:12
|
|
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами:
2055431
Репутация:
3
|
|
Посмотрел пару уроков по сф и решил сделать жоски скрипт с хуком синхры педа, сделал, ошибок при компиляции никаких нету, но хук как я понял не срабатывает.
main.cpp:
Код:
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_OUTCOMING_PACKET
,
onSendPacket
)
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"abc"
,
[
]
(
std
::
string
)
{
AddChat
(
-
1
,
"Mamut_Rahal active"
)
;
actived
=
!
actived
;
}
)
;
//SF->getSAMP()->getPlayers()->GetActorHandleFromSAMPPlayerID(id);
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
;
AddChat
(
-
1
,
"Ну типа работа с синхрой бу Ега."
)
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}
main.h:
Код:
#pragma once
#include "SAMPFUNCS_API.h"
#include "game_api.h"
bool
__stdcall
onSendPacket
(
stRakNetHookParams
*
param
)
;
static
bool
actived
=
false
;
#define AddChat SF->getSAMP()->getChat()->AddChatMessage
extern
SAMPFUNCS
*
SF
;
raknet.cpp (сам хук):
Код:
#include "main.h"
bool
__stdcall
onSendPacket
(
stRakNetHookParams
*
param
)
{
if
(
param
->
packetId
==
ID_PLAYER_SYNC
)
{
if
(
actived
)
{
BYTE packet
;
stOnFootData data
;
memset
(
&
data
,
0
,
sizeof
(
stOnFootData
)
)
;
//float pos = SF->getSAMP()->getPlayers()->GetOnFootData(2)->fPosition[3];
param
->
bitStream
->
ResetReadPointer
(
)
;
param
->
bitStream
->
Read
(
packet
)
;
param
->
bitStream
->
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
data
.
fMoveSpeed
[
0
]
=
2.5f
;
data
.
fMoveSpeed
[
1
]
=
2.5f
;
data
.
fMoveSpeed
[
2
]
=
2.5f
;
param
->
bitStream
->
ResetWritePointer
(
)
;
param
->
bitStream
->
Write
(
(
PCHAR
)
packet
)
;
param
->
bitStream
->
Write
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
AddChat
(
-
1
,
"%f %f %f"
,
data
.
fMoveSpeed
[
0
]
,
data
.
fMoveSpeed
[
1
]
,
data
.
fMoveSpeed
[
2
]
)
;
}
}
return
true
;
}
P.S. смог решить тем, что хук перенес из отдельного файла в main.cpp. Тогда еще 2 вопроса: как можно это сделать в разных файлах и влияет ли как-то на производительность то, что все в одном файле или разделено на несколько?
|
|
|

19.09.2022, 00:44
|
|
Участник форума
Регистрация: 21.07.2020
Сообщений: 280
С нами:
3059886
Репутация:
68
|
|
Сообщение от egaa
Посмотрел пару уроков по сф и решил сделать жоски скрипт с хуком синхры педа, сделал, ошибок при компиляции никаких нету, но хук как я понял не срабатывает.
main.cpp:
Код:
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_OUTCOMING_PACKET
,
onSendPacket
)
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"abc"
,
[
]
(
std
::
string
)
{
AddChat
(
-
1
,
"Mamut_Rahal active"
)
;
actived
=
!
actived
;
}
)
;
//SF->getSAMP()->getPlayers()->GetActorHandleFromSAMPPlayerID(id);
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
;
AddChat
(
-
1
,
"Ну типа работа с синхрой бу Ега."
)
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
return
TRUE
;
}
main.h:
Код:
#pragma once
#include "SAMPFUNCS_API.h"
#include "game_api.h"
bool
__stdcall
onSendPacket
(
stRakNetHookParams
*
param
)
;
static
bool
actived
=
false
;
#define AddChat SF->getSAMP()->getChat()->AddChatMessage
extern
SAMPFUNCS
*
SF
;
raknet.cpp (сам хук):
Код:
#include "main.h"
bool
__stdcall
onSendPacket
(
stRakNetHookParams
*
param
)
{
if
(
param
->
packetId
==
ID_PLAYER_SYNC
)
{
if
(
actived
)
{
BYTE packet
;
stOnFootData data
;
memset
(
&
data
,
0
,
sizeof
(
stOnFootData
)
)
;
//float pos = SF->getSAMP()->getPlayers()->GetOnFootData(2)->fPosition[3];
param
->
bitStream
->
ResetReadPointer
(
)
;
param
->
bitStream
->
Read
(
packet
)
;
param
->
bitStream
->
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
data
.
fMoveSpeed
[
0
]
=
2.5f
;
data
.
fMoveSpeed
[
1
]
=
2.5f
;
data
.
fMoveSpeed
[
2
]
=
2.5f
;
param
->
bitStream
->
ResetWritePointer
(
)
;
param
->
bitStream
->
Write
(
(
PCHAR
)
packet
)
;
param
->
bitStream
->
Write
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
AddChat
(
-
1
,
"%f %f %f"
,
data
.
fMoveSpeed
[
0
]
,
data
.
fMoveSpeed
[
1
]
,
data
.
fMoveSpeed
[
2
]
)
;
}
}
return
true
;
}
P.S. смог решить тем, что хук перенес из отдельного файла в main.cpp. Тогда еще 2 вопроса: как можно это сделать в разных файлах и влияет ли как-то на производительность то, что все в одном файле или разделено на несколько?
создать raknet.h и добавить прототип bool __stdcall onSendPacket(stRakNetHookParams* param);
и подключить этот файл в main.h и raknet.cpp
или вместо .cpp/h юзать .hpp
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|