Просмотр полной версии : С/С++ Вопрос - Ответ
В интернете много гайдов по подобным меню, достаточно просто ввести:" d3d9 menu".
А принцип таков, ты хукаешь один из методов отрисовки и инициализируешь меню
Взял последний пример, такой скомпилил в dll, всё ок, запускаю игру открываю CE и пытаюсь заинжектить DLL, а оно выдает ошибку типа Еррор
Что не так-то? Я так и не понял =(
UPD: Дело в том, что даже самые простые (мои созданные) DLL проекты не хочет инжектить.. Как исправить?
CleanLegend
05.08.2018, 17:53
Взял последний пример, такой скомпилил в dll, всё ок, запускаю игру открываю CE и пытаюсь заинжектить DLL, а оно выдает ошибку типа Еррор
Что не так-то? Я так и не понял =(
UPD: Дело в том, что даже самые простые (мои созданные) DLL проекты не хочет инжектить.. Как исправить?
Попробуй инжектить через другую программу, Procces Hacker как вариант
добрые люди киньте сурс любого сф аима
C++:
// Аимбот класса "Школьник"
// Разработчик: Martin 0pc0d3R
// требования: SF 5.3.3
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#include "MemoryHack.h"
#pragma warning (disable:4700)
#pragma warning (disable:4244)
#pragma warning (disable:4018)
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
#define GetCurrentDir _getcwd
bool
Aimbot
=
false
;
struct
AimbotSettings
{
float
ResX
,
ResY
;
float
FieldOfView
=
false
;
int
fSkins
[
10
]
;
bool
AutoActivation
=
false
;
int
ActivationMode
=
1
;
byte HookedKey
=
82
;
int
IgnoredWeapons
[
13
]
;
AimbotSettings
(
)
{
for
(
short
e
=
0
;
e
Prioritet
;
std
::
vector
Distance
;
Prioritet
.
reserve
(
139
)
;
Prioritet
.
assign
(
139
,
255
)
;
Distance
.
reserve
(
139
)
;
Distance
.
assign
(
139
,
5000.0
)
;
for
(
uint32_t
one
=
0
;
one
=
0x00
)
&&
(
two
getSAMP
(
)
->
getPlayers
(
)
->
GetSAMPPlayerIDFromGTAHandle
(
two
)
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
ID
]
)
{
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
IsPlayerDefined
(
ID
,
true
)
)
{
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
ID
]
->
pPlayerData
->
iAFKState
!=
2
)
{
float
dist
[
3
]
,
mdist
[
3
]
,
screen
[
2
]
;
for
(
short
x
=
0
;
x
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
ID
]
->
pPlayerData
->
bytePlayerState
==
PLAYER_STATE_ONFOOT
)
dist
[
x
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
ID
)
->
fPosition
[
x
]
;
else
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
ID
]
->
pPlayerData
->
bytePlayerState
==
PLAYER_STATE_DRIVER
)
dist
[
x
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetInCarData
(
ID
)
->
fPosition
[
x
]
;
else
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
ID
]
->
pPlayerData
->
bytePlayerState
==
PLAYER_STATE_PASSENGER
)
dist
[
x
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetPassengerData
(
ID
)
->
fPosition
[
x
]
;
}
mdist
[
0
]
=
PEDSELF
->
GetPosition
(
)
->
fX
;
mdist
[
1
]
=
PEDSELF
->
GetPosition
(
)
->
fY
;
mdist
[
2
]
=
PEDSELF
->
GetPosition
(
)
->
fZ
;
if
(
GetDistance3D
(
dist
,
mdist
)
GetCurrentWeaponStat
(
)
->
GetWeaponRange
(
)
)
{
SF
->
getGame
(
)
->
convert3DCoordsToScreen
(
dist
[
0
]
,
dist
[
1
]
,
dist
[
2
]
,
&
screen
[
0
]
,
&
screen
[
1
]
)
;
float
ScaleX
=
640.0
,
ScaleY
=
448.0
;
ScaleX
/=
cfg
.
ResX
;
ScaleY
/=
cfg
.
ResY
;
screen
[
0
]
*=
ScaleX
;
screen
[
1
]
*=
ScaleY
;
float
crosshair
[
2
]
=
{
339.1
,
179.1
}
;
float
distToTarget
=
GetDistance2D
(
crosshair
,
screen
)
;
if
(
cfg
.
FieldOfView
>=
distToTarget
)
{
CVector enemy
;
enemy
.
fX
=
dist
[
0
]
,
enemy
.
fY
=
dist
[
1
]
,
enemy
.
fZ
=
dist
[
2
]
;
bool
bCollision
=
GAME
->
GetWorld
(
)
->
IsLineOfSightClear
(
PEDSELF
->
GetPosition
(
)
,
&
enemy
)
;
if
(
bCollision
==
true
)
continue
;
else
{
actor_info
*
actorInfo
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
ID
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
if
(
actorInfo
!=
nullptr
)
{
CPed
*
Ped
=
GAME
->
GetPools
(
)
->
GetPed
(
(
DWORD
*
)
actorInfo
)
;
if
(
Ped
->
IsOnScreen
(
)
==
true
)
{
bool
contains
=
false
;
int
skin
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
ID
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
base
.
model_alt_id
;
for
(
short
c
=
0
;
c
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
Prioritet
[
iterator
]
]
&&
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
IsPlayerDefined
(
Prioritet
[
iterator
]
,
true
)
&&
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
Prioritet
[
iterator
]
]
->
pPlayerData
->
iAFKState
!=
2
)
return
Prioritet
[
iterator
]
;
else
return
65535
;
}
void
LoadConfig
(
void
)
{
char
*
path
=
new
char
[
256
]
;
char
*
dStr
=
new
char
[
40
]
;
char
*
rStr
=
new
char
[
51
]
;
GetCurrentDir
(
path
,
256
)
;
strcat
(
path
,
"\\SAMPFUNCS\\Школотрон.ini"
)
;
char
*
stric
=
new
char
[
20
]
;
if
(
GetPrivateProfileSection
(
"Настройки"
,
stric
,
sizeof
(
stric
)
,
path
)
)
{
cfg
.
FieldOfView
=
(
(
float
)
GetPrivateProfileInt
(
"Настройки"
,
"Радиус"
,
45
,
path
)
)
;
GetPrivateProfileString
(
"Настройки"
,
"Свои"
,
NULL
,
dStr
,
40
,
path
)
;
sscanf_s
(
dStr
,
"%d|%d|%d|%d|%d|%d|%d|%d|%d|%d"
,
&
cfg
.
fSkins
[
0
]
,
&
cfg
.
fSkins
[
1
]
,
&
cfg
.
fSkins
[
2
]
,
&
cfg
.
fSkins
[
3
]
,
&
cfg
.
fSkins
[
4
]
,
&
cfg
.
fSkins
[
5
]
,
&
cfg
.
fSkins
[
6
]
,
&
cfg
.
fSkins
[
7
]
,
&
cfg
.
fSkins
[
8
]
,
&
cfg
.
fSkins
[
9
]
)
;
cfg
.
AutoActivation
=
(
bool
)
GetPrivateProfileInt
(
"Настройки"
,
"Автоактивация"
,
0
,
path
)
;
cfg
.
ActivationMode
=
(
byte
)
GetPrivateProfileInt
(
"Настройки"
,
"Поджимной"
,
0
,
path
)
;
if
(
cfg
.
AutoActivation
==
true
&&
cfg
.
ActivationMode
==
0
)
Aimbot
=
true
;
cfg
.
HookedKey
=
(
byte
)
GetPrivateProfileInt
(
"Настройки"
,
"Клавиша"
,
255
,
path
)
;
GetPrivateProfileString
(
"Настройки"
,
"Игнорируемое"
,
NULL
,
rStr
,
51
,
path
)
;
sscanf_s
(
rStr
,
"%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d"
,
&
cfg
.
IgnoredWeapons
[
0
]
,
&
cfg
.
IgnoredWeapons
[
1
]
,
&
cfg
.
IgnoredWeapons
[
2
]
,
&
cfg
.
IgnoredWeapons
[
3
]
,
&
cfg
.
IgnoredWeapons
[
4
]
,
&
cfg
.
IgnoredWeapons
[
5
]
,
&
cfg
.
IgnoredWeapons
[
6
]
,
&
cfg
.
IgnoredWeapons
[
7
]
,
&
cfg
.
IgnoredWeapons
[
8
]
,
&
cfg
.
IgnoredWeapons
[
9
]
,
&
cfg
.
IgnoredWeapons
[
10
]
,
&
cfg
.
IgnoredWeapons
[
11
]
,
&
cfg
.
IgnoredWeapons
[
12
]
)
;
MemoryHack
*
mem
=
new
MemoryHack
(
"gta_sa.exe"
,
32
)
;
mem
->
Open
(
)
;
cfg
.
ResX
=
static_cast
(
mem
->
Read
(
0xC17044
,
4
)
.
toINT32
(
)
)
;
cfg
.
ResY
=
static_cast
(
mem
->
Read
(
0xC17048
,
4
)
.
toINT32
(
)
)
;
mem
->
Close
(
)
;
}
else
{
WritePrivateProfileString
(
"Настройки"
,
"Радиус"
,
"150"
,
path
)
;
WritePrivateProfileString
(
"Настройки"
,
"Свои"
,
"-1|-1|-1|-1|-1|-1|-1|-1|-1|-1"
,
path
)
;
WritePrivateProfileString
(
"Настройки"
,
"Автоактивация"
,
"0"
,
path
)
;
WritePrivateProfileString
(
"Настройки"
,
"Поджимной"
,
"0"
,
path
)
;
WritePrivateProfileString
(
"Настройки"
,
"Клавиша"
,
"82"
,
path
)
;
WritePrivateProfileString
(
"Настройки"
,
"Игнорируемое"
,
"255|255|255|255|255|255|255|255|255|255|255|255|25 5"
,
path
)
;
}
delete
[
]
path
,
stric
,
dStr
,
rStr
;
}
void
__stdcall
mainloop
(
void
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
255
,
255
,
255
)
,
"{F5B800}Школьный аим {00B88A}by 0pc0d3R"
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
255
,
255
,
255
)
,
"{FFDB70}Специально для портала {00F53D}Silent-Hack.Ru"
)
;
init
=
true
;
LoadConfig
(
)
;
}
else
{
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
iIsActive
==
1
&&
SF
->
getSAMP
(
)
->
getInput
(
)
->
iInputEnabled
==
0
)
{
if
(
cfg
.
ActivationMode
==
0
&&
SF
->
getGame
(
)
->
isKeyPressed
(
cfg
.
HookedKey
)
)
{
if
(
Aimbot
?
false
:
true
)
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
148
,
112
,
255
)
,
"{CCFF33}ШколоАИМ {8AB800}Включен!"
)
;
else
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
148
,
112
,
255
)
,
"{CCFF33}ШколоАИМ {FF3366}Выключен."
)
;
Aimbot
^=
true
;
}
if
(
cfg
.
ActivationMode
==
1
)
{
if
(
SF
->
getGame
(
)
->
isKeyDown
(
cfg
.
HookedKey
)
)
Aimbot
=
true
;
else
Aimbot
=
false
;
}
if
(
Aimbot
==
true
)
{
for
(
short
r
=
0
;
r
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
)
return
;
}
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
0x01
)
)
{
byte cam
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
aimData
.
byteCamMode
;
if
(
cam
!=
53
&&
cam
!=
55
&&
cam
!=
65
&&
cam
!=
7
&&
cam
!=
39
)
return
;
WORD vID
=
FindTargetInRadiusToCrosshair
(
cfg
.
FieldOfView
)
;
CVector vector
,
vPos
;
if
(
vID
==
65535
)
return
;
if
(
PEDSELF
->
GetWeapon
(
PEDSELF
->
GetCurrentWeaponSlot
(
)
)
->
GetState
(
)
==
WEAPONSTATE_RELOADING
)
return
;
actor_info
*
actorInfo
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
vID
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
if
(
actorInfo
!=
nullptr
)
{
CPed
*
Ped
=
GAME
->
GetPools
(
)
->
GetPed
(
(
DWORD
*
)
actorInfo
)
;
Ped
->
GetTransformedBonePosition
(
BONE_UPPERTORSO
,
&
vPos
)
;
}
CVector
*
src
=
GAME
->
GetCamera
(
)
->
GetCam
(
GAME
->
GetCamera
(
)
->
GetActiveCam
(
)
)
->
GetSource
(
)
;
CCam
*
pCam
=
GAME
->
GetCamera
(
)
->
GetCam
(
GAME
->
GetCamera
(
)
->
GetActiveCam
(
)
)
;
vector
.
fX
=
src
->
fX
-
vPos
.
fX
;
vector
.
fY
=
src
->
fY
-
vPos
.
fY
;
vector
.
fZ
=
src
->
fZ
-
vPos
.
fZ
;
float
ax
,
az
,
fz
,
fx
;
float
*
screenAspectRatio
=
(
float
*
)
0xC3EFA4
;
float
*
crosshairOffset
=
(
float
*
)
0xB6EC10
;
if
(
pCam
->
GetMode
(
)
==
53
||
pCam
->
GetMode
(
)
==
55
)
{
float
mult
=
tan
(
pCam
->
GetFOV
(
)
*
0.5f
*
0.017453292f
)
;
fz
=
M_PI
-
atan2
(
1.0f
,
mult
*
(
(
0.5f
-
crosshairOffset
[
0
]
+
0.5f
-
crosshairOffset
[
0
]
)
*
(
1.0f
/
*
screenAspectRatio
)
)
)
;
fx
=
M_PI
-
atan2
(
1.0f
,
mult
*
(
crosshairOffset
[
1
]
-
0.5f
+
crosshairOffset
[
1
]
-
0.5f
)
)
;
}
else
fx
=
fz
=
M_PI
/
2
;
float
dist
=
sqrt
(
vector
.
fX
*
vector
.
fX
+
vector
.
fY
*
vector
.
fY
)
;
ax
=
atan2f
(
vector
.
fY
,
-
vector
.
fX
)
-
M_PI
/
2
;
az
=
atan2f
(
dist
,
vector
.
fZ
)
;
float
xVec
=
-
(
ax
-
fx
)
;
float
zVec
=
(
az
-
fz
)
;
pCam
->
SetDirection
(
xVec
,
zVec
)
;
}
}
}
}
}
bool
WINAPI
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
switch
(
dwReasonForCall
)
{
case
DLL_PROCESS_ATTACH
:
SF
->
initPlugin
(
mainloop
,
hModule
)
;
break
;
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}
-raymond-
06.08.2018, 08:38
https://i.imgur.com/LZ0Ahfd.png
C++:
colorgz
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pGangzone
->
pGangzone
[
i
]
.
dwColor
;
Dark_Knight
06.08.2018, 14:59
C++:
Gangzone
[
i
]
->
dwColor
-raymond-
09.08.2018, 08:32
как выпустить пулю в машину, если я имею ее координаты?
CleanLegend
09.08.2018, 15:22
как выпустить пулю в машину, если я имею ее координаты?
Вариант с SF - Информация - [SF] Полезные функции(https://blast.hk/threads/10970/#post-95196) (https://blast.hk/threads/10970/#post-95196)
Заменяешь это sync.byteType = 1 на это sync.byteType = 2
Как скомпилить без окна Windows? Что бы был только ImGui когда инжектиться Dll
https://forum.antichat.xyz/attachments/27238212/
-raymond-
09.08.2018, 16:55
машина не получает урон
C++:
[CODE]
float
GetDistance
(
float
X
,
float
Y
,
float
Z
,
float
XX
,
float
YY
,
float
ZZ
)
{
return
sqrt
(
(
X
-
XX
)
*
(
X
-
XX
)
+
(
Y
-
YY
)
*
(
Y
-
YY
)
+
(
Z
-
ZZ
)
*
(
Z
-
ZZ
)
)
;
}
void
BulletData
(
float
PX
,
float
PY
,
float
PZ
)
{
stBulletData sync
;
ZeroMemory
(
&
sync
,
sizeof
(
stBulletData
)
)
;
sync
.
sTargetID
=
NULL
;
sync
.
fOrigin
[
0
]
=
PEDSELF
->
GetPosition
(
)
->
fX
;
sync
.
fOrigin
[
1
]
=
PEDSELF
->
GetPosition
(
)
->
fY
;
sync
.
fOrigin
[
2
]
=
PEDSELF
->
GetPosition
(
)
->
fZ
;
sync
.
fTarget
[
0
]
=
PX
;
sync
.
fTarget
[
1
]
=
PY
;
sync
.
fTarget
[
2
]
=
PZ
;
sync
.
fCenter
[
0
]
=
0.0
;
sync
.
fCenter
[
1
]
=
1.0
;
sync
.
fCenter
[
2
]
=
0.5
;
sync
.
byteWeaponID
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
sync
.
byteType
=
2
;
BitStream BulletSync
;
BulletSync
.
Write
(
(
BYTE
)
PacketEnumeration
::
ID_BULLET_SYNC
)
;
BulletSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stBulletData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
BulletSync
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"[] -> Пуля выпущена в машину"
)
;
}
void
CALLBACK
send_bullet_from_car
(
)
{
float
poscar
[
3
]
;
for
(
int
i
=
0
;
i
getSAMP
(
)
->
getVehicles
(
)
->
pSAMP_Vehicle
[
i
]
)
continue
;
if
(
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
pSAMP_Vehicle
[
i
]
->
pGTA_Vehicle
->
base
.
model_alt_id
==
478
||
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
pSAMP_Vehicle
[
i
]
->
pGTA_Vehicle
->
base
.
model_alt_id
==
422
)
{
poscar
[
0
]
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pVehicle
->
pGTA_Vehicle
[
i
]
->
base
.
matrix
[
4
*
3
]
;
poscar
[
1
]
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pVehicle
->
pGTA_Vehicle
[
i
]
->
base
.
matrix
[
4
*
3
+
1
]
;
poscar
[
2
]
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pVehicle
->
pGTA_Vehicle
[
i
]
->
base
.
matrix
[
4
*
3
+
2
]
;
if
(
GetDistance
(
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
,
poscar
[
0
]
,
poscar
[
1
]
,
poscar
[
2
]
)
CleanLegend
09.08.2018, 17:02
sync.sTargetID = NULL;
исправь на ID машины
Dark_Knight
09.08.2018, 17:42
Урон по тачке идет, если в ней есть игрок. Так же ид игрока, который в машине надо указывать.
Musaigen
09.08.2018, 21:11
Как получить координаты кости другого игрока?
CleanLegend
09.08.2018, 21:43
Как скомпилить без окна Windows? Что бы был только ImGui когда инжектиться Dll
Напиши подробнее
Как получить координаты кости другого игрока?
C++:
CPed
*
Ped
=
GAME
->
GetPools
(
)
->
GetPed
(
(
DWORD
*
)
actorInfo
)
;
Ped
->
GetTransformedBonePosition
(
BONE_SPINE1
,
&
vPos
)
;
-raymond-
10.08.2018, 09:30
как отнять патрон от оружия которое в руках?
iAmerican
10.08.2018, 20:49
как отнять патрон от оружия которое в руках?
C++:
int
ammo
=
SA
->
getPlayers
(
)
->
pLocalPlayer
->
iWeaponAmmo
[
SA
->
getPlayers
(
)
->
pLocalPlayer
->
pSAMP_Actor
->
pGTA_Ped
->
weapon_slot
]
-
1
;
SA
->
setAmmo
(
SA
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
,
ammo
)
;
int
sampAPI
::
setAmmo
(
int
weaponId
,
int
ammo
)
{
typedef
int
(
__thiscall
*
CPed__setAmmo
)
(
void
*
_this
,
int
weaponId
,
int
ammo
)
;
return
(
CPed__setAmmo
(
(
uint32_t
)
0x5DF290
)
)
(
SA
->
getPlayers
(
)
->
pLocalPlayer
->
pSAMP_Actor
->
pGTA_Ped
,
weaponId
,
ammo
)
;
}
на сф сам переведешь
Как скомпилить без окна Windows? Что бы был только ImGui когда инжектиться Dll
Imgui по размеру окна растягивай.
И замени флаг создания окна с WS_OVERLAPPEDWINDOW на WS_POPUP.
Скомпилируйте код пж а то не устанавливаеться прога чтобы компильнуть
Код:
#include "plugin.h"
#include "common.h"
#include "CTimer.h"
#include "CStreaming.h"
#include "CTaskComplexPlayHandSignalAnim.h"
#define NEW_MODEL_AT_KEY_PRESS
using namespace plugin;
class HandSignals {
public:
HandSignals() {
static int keyPressTime = 0;
static int newPlayerModelId = -1;
static int gangModelIds[] = { MODEL_BALLAS1,
MODEL_BALLAS2,
MODEL_BALLAS3,
MODEL_FAM1,
MODEL_FAM2,
MODEL_FAM3,
MODEL_LSV1,
MODEL_LSV2,
MODEL_LSV3,
MODEL_VLA1,
MODEL_VLA2,
MODEL_VLA3 };
Events::gameProcessEvent += [] {
CPed *playa = FindPlayerPed();
if (playa && playa->IsAlive() && CTimer::m_snTimeInMilliseconds - keyPressTime > 500) {
int animationId = -1;
if (KeyPressed(0x31)) // 1
animationId = 320;
else if (KeyPressed(0x32)) // 2
animationId = 321;
else if (KeyPressed(0x33)) // 3
animationId = 322;
else if (KeyPressed(0x34)) // 4
animationId = 323;
else if (KeyPressed(0x35)) // 5
animationId = 324;
if (animationId != -1) {
keyPressTime = CTimer::m_snTimeInMilliseconds;
#ifndef NEW_MODEL_AT_KEY_PRESS
if (newPlayerModelId == -1)
#endif
newPlayerModelId = gangModelIds[rand() % 12];
if (playa->m_nModelIndex != newPlayerModelId) {
CStreaming::RequestModel(newPlayerModelId, 2);
CStreaming::LoadAllRequestedModels(false);
unsigned int savedAnimGroup = playa->m_nAnimGroup;
playa->DeleteRwObject();
playa->m_nModelIndex = -1;
playa->SetModelIndex(newPlayerModelId);
playa->m_nAnimGroup = savedAnimGroup;
CStreaming::SetModelIsDeletable(newPlayerModelId);
}
playa->m_pIntelligence->m_TaskMgr.SetTaskSecondary(new CTaskComplexPlayHandSignalAnim(animationId, 4.0f), 4);
}
}
};
}
} handSignals;
Как подключить проект в Microsoft Visual Studio 2017?
iAmerican
13.08.2018, 10:49
Как подключить проект в Microsoft Visual Studio 2017?
Конкретнее можно?
Конкретнее можно?
Я скачал архив с проектом для разработчиков. Как его подключить чтобы компилировались файлы .sf?
Я скачал архив с проектом для разработчиков. Как его подключить чтобы компилировались файлы .sf?
.sln файл открывай
Скиньте полный код который выводит текст в чат на sf
CleanLegend
13.08.2018, 14:26
Скиньте полный код который выводит текст в чат на sf
Посмотри все гайды по SF API в этом разделе.
C++:
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Text"
)
;
Здарова, мужики.
Пишу dll d3d9, которое будет подгружать основной d3d9.dll от майкрософт. Только одна проблема.... Крашит при входе. Что делать, чтобы всё заработало?
C++:
#include
#include
#include
#include
#include
void
__cdecl
MainThread
(
void
*
pArg
)
{
while
(
true
)
{
Sleep
(
10
)
;
if
(
GetAsyncKeyState
(
VK_NUMPAD1
)
)
{
keybd_event
(
'n'
,
0
,
0
,
0
)
;
keybd_event
(
'n'
,
0
,
KEYEVENTF_KEYUP
,
0
)
;
}
}
}
BOOL WINAPI
DllMain
(
_In_ HINSTANCE hinstDLL
,
_In_ DWORD fdwReason
,
_In_ PVOID lpvReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
{
LoadLibrary
(
"C:\\Windows\\System32\\d3d9.dll"
)
;
_beginthread
(
MainThread
,
NULL
,
nullptr
)
;
}
return
TRUE
;
}
Ошибка:
Код:
Серьезность Код Описание Строка Состояние подавления
Предупреждение MSB8004 каталог Output заканчивается не косой чертой. Этот экземпляр сборки добавит косую черту, поскольку она необходима для правильного определения каталога Output. 377
Ты должен реализовать в библиотеке все интерфейсы оригинально библиотеки и пробрасывать их. Это тебе не Linux, что бы все так просто было с прокси-либой
_=Gigant=_
15.08.2018, 23:19
1.
for (int other_players = 0; other_players base.matrix[4 * 3];
player_pos.x = f_pos[0];
player_pos.y = f_pos[1];
player_pos.z = f_pos[2];
CalcScreenCoors(&player_pos, &screenposs);
char pos[256], ping[256], hparmw[256], pnameid[256] ;
if (screenposs.z PrintShadow(screenposs.x, screenposs.y - 12, COLOR_WHITE(255), skin);
thanks for help !
CleanLegend
15.08.2018, 23:28
1.
for (int other_players = 0; other_players base.matrix[4 * 3];
player_pos.x = f_pos[0];
player_pos.y = f_pos[1];
player_pos.z = f_pos[2];
CalcScreenCoors(&player_pos, &screenposs);
char pos[256], ping[256], hparmw[256], pnameid[256] ;
if (screenposs.z PrintShadow(screenposs.x, screenposs.y - 12, COLOR_WHITE(255), skin);
thanks for help !
1)
C++:
actor
->
base
.
model_alt_id
;
2) test it
C++:
player_pos
.
x
=
actor
->
base
.
matrix
[
12
]
;
player_pos
.
y
=
actor
->
base
.
matrix
[
13
]
;
player_pos
.
z
=
actor
->
base
.
matrix
[
14
]
;
_=Gigant=_
15.08.2018, 23:43
1)
C++:
actor
->
base
.
model_alt_id
;
2) test it
C++:
player_pos
.
x
=
actor
->
base
.
matrix
[
12
]
;
player_pos
.
y
=
actor
->
base
.
matrix
[
13
]
;
player_pos
.
z
=
actor
->
base
.
matrix
[
14
]
;
do you know how to define skin id for other_player ? for example i want to draw text on all players which are with skin id 29
CleanLegend
15.08.2018, 23:49
do you know how to define skin id for other_player ? for example i want to draw text on all players which are with skin id 29
C++:
if
(
actor
->
base
.
model_alt_id
!=
29
)
continue
;
Можно ли как то визуально переместить объект?
https://pp.userapi.com/c848532/v848532263/4e7ae/vWp_f91S_xw.jpg
CleanLegend
16.08.2018, 00:33
Можно ли как то визуально переместить объект?
vWp_f91S_xw.jpgCleanLegend · 15 Авг 2018 в 23:33' data-fancybox="lb-post-241455" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="/proxy.php?image=https%3A%2F%2Fpp.userapi.com%2Fc84 8532%2Fv848532263%2F4e7ae%2FvWp_f91S_xw.jpg&hash=6a66a0604fbbf273fc09f24a1808f6df" style="cursor: pointer;" title="vWp_f91S_xw.jpg">
https://pp.userapi.com/c848532/v848532263/4e7ae/vWp_f91S_xw.jpg
C++:
g_SAMP
->
pPools
->
pObject
->
object
[
id
]
->
pGTAEntity
->
base
.
matrix
[
12
]
=
X
;
g_SAMP
->
pPools
->
pObject
->
object
[
id
]
->
pGTAEntity
->
base
.
matrix
[
13
]
=
Y
;
g_SAMP
->
pPools
->
pObject
->
object
[
id
]
->
pGTAEntity
->
base
.
matrix
[
14
]
=
Z
;
_=Gigant=_
16.08.2018, 02:12
how to get other_players weapon i tried
_snprintf_s(buf, sizeof(buf) - 1, "Weapon %u", g_Players->pRemotePlayer->pPlayerData->onFootData.byteCurrentWeapon);
but it crash idk why i also used g_SAMP->pPools etcc.. also crash
g_Players->pRemotePlayer[player id]->pPlayerData->onFootData.byteCurrentWeapon
_=Gigant=_
16.08.2018, 02:22
g_Players->pRemotePlayer[player id]->pPlayerData->onFootData.byteCurrentWeapon
ye i put that pRemotePlayer[playerid] it also crash
ye i put that pRemotePlayer[playerid] it also crash
if(g_Players->iIsListed[id] != 1) continue;
_=Gigant=_
16.08.2018, 15:09
need little help, how to get position for vehicles ?
here what i did
void render()
{
for (int i = 0; i GetPools()->GetPed((DWORD*)player);
CVehicle *pVeh = pGameInterface->GetPools()->GetVehicle((DWORD*)vehicle); // i found this for vehicle
pPedSelf->GetBonePosition(BONE_SPINE1, &mySpinePoss); // here is used BONE
pVeh->GetPosition(); // now i don't know how to do for vehicle like for pPedSelf
if (screenposs.z DrawLine(CVecToD3DXVEC(mySpinePoss), CVecToD3DXVEC(TargetVehPos), color);
}
}
}
thanks for help !
C++:
string sr
=
"blast hk"
;
print
(
"%x.ys"
,
sr
)
Сколько байт нужно вставить в x и сколько знаков нужно вставить в y? Обьясните пожалуйста
CleanLegend
16.08.2018, 16:03
need little help, how to get position for vehicles ?
here what i did
void render()
{
for (int i = 0; i GetPools()->GetPed((DWORD*)player);
CVehicle *pVeh = pGameInterface->GetPools()->GetVehicle((DWORD*)vehicle); // i found this for vehicle
pPedSelf->GetBonePosition(BONE_SPINE1, &mySpinePoss); // here is used BONE
pVeh->GetPosition(); // now i don't know how to do for vehicle like for pPedSelf
if (screenposs.z DrawLine(CVecToD3DXVEC(mySpinePoss), CVecToD3DXVEC(TargetVehPos), color);
}
}
}
thanks for help !
C++:
vehicle
->
base
.
matrix
[
12
]
;
vehicle
->
base
.
matrix
[
13
]
;
vehicle
->
base
.
matrix
[
14
]
;
_=Gigant=_
16.08.2018, 16:42
C++:
vehicle
->
base
.
matrix
[
12
]
;
vehicle
->
base
.
matrix
[
13
]
;
vehicle
->
base
.
matrix
[
14
]
;
how to convert it to CVecToD3DXVEC ( )
Dark_Knight
16.08.2018, 16:56
it's float
AlexWhite
16.08.2018, 16:56
Есть у кого готовый хук для gta sa?
Dark_Knight
16.08.2018, 17:00
Есть у кого готовый хук для gta sa?
Какого? Хука Хуя, ДК хука, Ракнета?
AlexWhite
16.08.2018, 17:03
Какого? Хука Хуя, ДК хука, Ракнета?
D3D9 hook. Для отрисовки esp и т.д
_=Gigant=_
16.08.2018, 17:10
it's float
see here Screenshot_5 — Postimage.org(https://postimg.cc/image/x6x23l8zf/) (https://www.blast.hk/redirect/aHR0cHM6Ly9wb3N0aW1nLmNjL2ltYWdlL3g2eDIzbDh6Zi8)
CleanLegend
16.08.2018, 17:12
see here Screenshot_5 — Postimage.org(https://postimg.cc/image/x6x23l8zf/) (https://www.blast.hk/redirect/aHR0cHM6Ly9wb3N0aW1nLmNjL2ltYWdlL3g2eDIzbDh6Zi8)
C++:
CVector Vec
;
Vec
.
fX
=
vehicle
->
base
.
matrix
[
12
]
;
Vec
.
fY
=
vehicle
->
base
.
matrix
[
13
]
;
Vec
.
fZ
=
vehicle
->
base
.
matrix
[
14
]
;
Dark_Knight
16.08.2018, 17:14
D3D9 hook. Для отрисовки esp и т.д
Хуевая их туча в инете. Адресс IDirect3DDevice9 тоже есть в гугле для GTA SA
Пытаюсь получить позицию поля для ввода текста под чатом на SF (как сделано в CLEO InputHelper).
Посмотрев исходный код InputHelper-a, нашёл вот это:
CLEO:
0BAF:
samp
6@
= get_input_info_ptr
// stInputInfo
0C0C:
6@
= struct
6@
offset
{pDXUTEditBox}
0x8
size
4
// stInputBox
и это:
CLEO:
0C0C:
7@
= struct
6@
offset
{dwPosChatInput1}
0x8
size
4
// X
0C0C:
8@
= struct
6@
offset
{dwPosChatInput2}
0xC
size
4
// Y
Только я не очень шарю в клео.
Я так понял, что мне нужно вот это (на SF):
C++:
SF
->
getSAMP
(
)
->
getInput
(
)
->
pDXUTEditBox
;
но как оттуда достать X и Y?
или это вообще не то и мне надо доставать вручную из структур?
_=Gigant=_
16.08.2018, 23:22
how to get distance between me and vehicles near me ?
here code
for (int i = 0; i base.matrix[4 * 3];
player_pos.x = f_pos[0];
player_pos.y = f_pos[1];
player_pos.z = f_pos[2];
CalcScreenCoors(&player_pos, &screenposs);
float * f_poss = &vehicle->base.matrix[4 * 3];
vehicle_pos.x = f_poss[0];
vehicle_pos.y = f_poss[1];
vehicle_pos.z = f_poss[2];
CalcScreenCoors(&vehicle_pos, &vscreenposs);
thanks for help !
how to get distance between me and vehicles near me ?
here code
for (int i = 0; i base.matrix[4 * 3];
player_pos.x = f_pos[0];
player_pos.y = f_pos[1];
player_pos.z = f_pos[2];
CalcScreenCoors(&player_pos, &screenposs);
float * f_poss = &vehicle->base.matrix[4 * 3];
vehicle_pos.x = f_poss[0];
vehicle_pos.y = f_poss[1];
vehicle_pos.z = f_poss[2];
CalcScreenCoors(&vehicle_pos, &vscreenposs);
thanks for help !
Код:
float GetDistance(D3DXVECTOR3 target)
{
D3DXVECTOR3 player(PEDSELF->GetPosition()->fX, PEDSELF->GetPosition()->fY, PEDSELF->GetPosition()->fZ);
return sqrt((player.x - target.x) * (player.x - target.x) + (player.y - target.y) * (player.y - target.y) + (player.z - target.z) * (player.z - target.z));
}
Example:
Код:
sprintf(szMsg, "%.0f m.", GetDistance(D3DXVECTOR3(x, y, z)));
_=Gigant=_
17.08.2018, 01:20
Код:
float GetDistance(D3DXVECTOR3 target)
{
D3DXVECTOR3 player(PEDSELF->GetPosition()->fX, PEDSELF->GetPosition()->fY, PEDSELF->GetPosition()->fZ);
return sqrt((player.x - target.x) * (player.x - target.x) + (player.y - target.y) * (player.y - target.y) + (player.z - target.z) * (player.z - target.z));
}
Example:
Код:
sprintf(szMsg, "%.0f m.", GetDistance(D3DXVECTOR3(x, y, z)));
thank you very much !
here is the full code if someone need
float GetDistance(D3DXVECTOR3 target)
{
actor_info * playerR = actor_info_get(ACTOR_SELF, NULL);
CPed *pPedSelf = pGameInterface->GetPools()->GetPed((DWORD*)playerR);
D3DXVECTOR3 player(pPedSelf->GetPosition()->fX, pPedSelf->GetPosition()->fY, pPedSelf->GetPosition()->fZ);
return sqrt((player.x - target.x) * (player.x - target.x) + (player.y - target.y) * (player.y - target.y) + (player.z - target.z) * (player.z - target.z));
}
sprintf(ctarget_ping_score, "{8cff00}Ping{FFFFFF} %d{007bff} Score{FFFFFF} %d ", g_Players>pRemotePlayer[Informer_Target_PlayerID]>iPing, g_Players->pRemotePlayer[Informer_Target_PlayerID]->iScore);
this code you see should display player ping and score, it does sometimes but not always what's wrong with this ? here you can see that player score and ping is 0 and sometimes it displays correct value idk what's wrong
https://s33.postimg.cc/m51mg3an3/sa-mp-234.png
thanks for help !
sprintf(ctarget_ping_score, "{8cff00}Ping{FFFFFF} %d{007bff} Score{FFFFFF} %d ", g_Players>pRemotePlayer[Informer_Target_PlayerID]>iPing, g_Players->pRemotePlayer[Informer_Target_PlayerID]->iScore);
this code you see should display player ping and score, it does sometimes but not always what's wrong with this ? here you can see that player score and ping is 0 and sometimes it displays correct value idk what's wrong
https://s33.postimg.cc/m51mg3an3/sa-mp-234.png
thanks for help !
Lesson number 1:
Код:
void CALLBACK cmd_show_info_player( std::string param )
{
if ( param.empty() ) return;
int i = std::stoi( param );
char buf[128];
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];
if(!pPlayer) return;
sprintf( buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",
pPlayer->szPlayerName,
pPlayer->iPing,
pPlayer->iScore,
pPlayer->iIsNPC,
pPlayer->pPlayerData->iAFKState == 2 );
SF->getSAMP()->getChat()->AddChatMessage( -1, buf );
};
And in Mainloop:
SF->getSAMP()->registerChatCommand( "showinfo", cmd_show_info_player );
Expample for you:
Код:
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ Informer_Target_PlayerID ];
if(!pPlayer) return;
sprintf(ctarget_ping_score, "{8cff00}Ping{FFFFFF} %d{007bff} Score{FFFFFF} %d ", pPlayer->iPing, pPlayer->iScore);
What kind of font do you use?
_=Gigant=_
17.08.2018, 13:44
Lesson number 1:
Код:
void CALLBACK cmd_show_info_player( std::string param )
{
if ( param.empty() ) return;
int i = std::stoi( param );
char buf[128];
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];
if(!pPlayer) return;
sprintf( buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",
pPlayer->szPlayerName,
pPlayer->iPing,
pPlayer->iScore,
pPlayer->iIsNPC,
pPlayer->pPlayerData->iAFKState == 2 );
SF->getSAMP()->getChat()->AddChatMessage( -1, buf );
};
And in Mainloop:
SF->getSAMP()->registerChatCommand( "showinfo", cmd_show_info_player );
Expample for you:
Код:
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ Informer_Target_PlayerID ];
if(!pPlayer) return;
sprintf(ctarget_ping_score, "{8cff00}Ping{FFFFFF} %d{007bff} Score{FFFFFF} %d ", pPlayer->iPing, pPlayer->iScore);
What kind of font do you use?
im using
pD3DFont_sampStuff
CD3DFont *pD3DFont_sampStuff = new CD3DFont( "Tahoma", 10, FCR_BORDER );
CleanLegend
17.08.2018, 13:49
sprintf(ctarget_ping_score, "{8cff00}Ping{FFFFFF} %d{007bff} Score{FFFFFF} %d ", g_Players>pRemotePlayer[Informer_Target_PlayerID]>iPing, g_Players->pRemotePlayer[Informer_Target_PlayerID]->iScore);
this code you see should display player ping and score, it does sometimes but not always what's wrong with this ? here you can see that player score and ping is 0 and sometimes it displays correct value idk what's wrong
https://s33.postimg.cc/m51mg3an3/sa-mp-234.png
thanks for help !
you need send update scoreboard
_=Gigant=_
17.08.2018, 15:09
you need send update scoreboard
how can i do that i took a look at FYP screen info code and i included same stuff as him in that code still ping and score shows 0 here full code
C++:
void
renderPlayerInfo
(
)
{
traceLastFunc
(
"renderPlayerInfo()"
)
;
if
(
gta_menu_active
(
)
)
return
;
if
(
cheat_state
->
_generic
.
cheat_panic_enabled
)
return
;
if
(
!
g_dwSAMP_Addr
||
!
g_SAMP
||
!
g_Players
)
return
;
// don't run if the CGameSA doesn't exist
if
(
!
pGameInterface
)
return
;
// don't run if we don't exist
if
(
isBadPtr_GTA_pPed
(
pPedSelf
)
)
return
;
if
(
g_Scoreboard
->
iIsEnabled
)
return
;
for
(
int
i
=
0
;
i
base
.
matrix
[
4
*
3
]
;
player_pos
.
x
=
f_pos
[
0
]
;
player_pos
.
y
=
f_pos
[
1
]
;
player_pos
.
z
=
f_pos
[
2
]
;
CalcScreenCoors
(
&
player_pos
,
&
screenposs
)
;
char
pos
[
256
]
,
ping
[
256
]
,
hparmw
[
256
]
,
pnameid
[
256
]
,
skin
[
256
]
;
if
(
screenposs
.
z
iIsListed
[
i
]
!=
1
)
continue
;
stRemotePlayer
*
pPlayer
=
g_SAMP
->
pPools
->
pPlayer
->
pRemotePlayer
[
i
]
;
const
char
*
playerName
=
getPlayerName
(
i
)
;
if
(
Informer
)
{
_snprintf_s
(
pnameid
,
sizeof
(
pnameid
)
-
1
,
"{C235DD}Player{FFFFFF} %s {00FF00} Distance{FFFFFF} %.0f m"
,
playerName
,
i
,
GetDistance
(
D3DXVECTOR3
(
player_pos
.
x
,
player_pos
.
y
,
player_pos
.
z
)
)
)
;
pD3DFont_sampStuff
->
PrintShadow
(
screenposs
.
x
,
screenposs
.
y
-
38
,
COLOR_WHITE
(
255
)
,
pnameid
)
;
_snprintf_s
(
hparmw
,
sizeof
(
hparmw
)
-
1
,
"{FF0F0F}Health{FFFFFF} %0.0f Armour %0.0f{FFA00F} Weapon{FFFFFF} %u"
,
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
->
fActorHealth
,
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
->
fActorArmor
,
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
->
onFootData
.
byteCurrentWeapon
)
;
//, g_Players->pRemotePlayer[i]->szPlayerName, i);
pD3DFont_sampStuff
->
PrintShadow
(
screenposs
.
x
,
screenposs
.
y
-
26
,
COLOR_WHITE
(
255
)
,
hparmw
)
;
_snprintf_s
(
ping
,
sizeof
(
ping
)
-
1
,
"{F0FF0F}Skin{FFFFFF} %d{00FF00} Ping{FFFFFF} %d Score %d"
,
actor
->
base
.
model_alt_id
,
pPlayer
->
iPing
,
pPlayer
->
iScore
)
;
pD3DFont_sampStuff
->
PrintShadow
(
screenposs
.
x
,
screenposs
.
y
-
14
,
COLOR_WHITE
(
255
)
,
ping
)
;
_snprintf_s
(
pos
,
sizeof
(
pos
)
-
1
,
"Pos X %0.02f Y %0.02f Z %0.02f"
,
player_pos
.
x
,
player_pos
.
y
,
player_pos
.
z
)
;
//, g_Players->pRemotePlayer[i]->szPlayerName, i);
pD3DFont_sampStuff
->
PrintShadow
(
screenposs
.
x
,
screenposs
.
y
,
COLOR_WHITE
(
255
)
,
pos
)
;
}
}
}
how can i do that i took a look at FYP screen info code and i included same stuff as him in that code still ping and score shows 0 here full code
C++:
void
renderPlayerInfo
(
)
{
traceLastFunc
(
"renderPlayerInfo()"
)
;
if
(
gta_menu_active
(
)
)
return
;
if
(
cheat_state
->
_generic
.
cheat_panic_enabled
)
return
;
if
(
!
g_dwSAMP_Addr
||
!
g_SAMP
||
!
g_Players
)
return
;
// don't run if the CGameSA doesn't exist
if
(
!
pGameInterface
)
return
;
// don't run if we don't exist
if
(
isBadPtr_GTA_pPed
(
pPedSelf
)
)
return
;
if
(
g_Scoreboard
->
iIsEnabled
)
return
;
for
(
int
i
=
0
;
i
base
.
matrix
[
4
*
3
]
;
player_pos
.
x
=
f_pos
[
0
]
;
player_pos
.
y
=
f_pos
[
1
]
;
player_pos
.
z
=
f_pos
[
2
]
;
CalcScreenCoors
(
&
player_pos
,
&
screenposs
)
;
char
pos
[
256
]
,
ping
[
256
]
,
hparmw
[
256
]
,
pnameid
[
256
]
,
skin
[
256
]
;
if
(
screenposs
.
z
iIsListed
[
i
]
!=
1
)
continue
;
stRemotePlayer
*
pPlayer
=
g_SAMP
->
pPools
->
pPlayer
->
pRemotePlayer
[
i
]
;
const
char
*
playerName
=
getPlayerName
(
i
)
;
if
(
Informer
)
{
_snprintf_s
(
pnameid
,
sizeof
(
pnameid
)
-
1
,
"{C235DD}Player{FFFFFF} %s {00FF00} Distance{FFFFFF} %.0f m"
,
playerName
,
i
,
GetDistance
(
D3DXVECTOR3
(
player_pos
.
x
,
player_pos
.
y
,
player_pos
.
z
)
)
)
;
pD3DFont_sampStuff
->
PrintShadow
(
screenposs
.
x
,
screenposs
.
y
-
38
,
COLOR_WHITE
(
255
)
,
pnameid
)
;
_snprintf_s
(
hparmw
,
sizeof
(
hparmw
)
-
1
,
"{FF0F0F}Health{FFFFFF} %0.0f Armour %0.0f{FFA00F} Weapon{FFFFFF} %u"
,
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
->
fActorHealth
,
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
->
fActorArmor
,
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
->
onFootData
.
byteCurrentWeapon
)
;
//, g_Players->pRemotePlayer[i]->szPlayerName, i);
pD3DFont_sampStuff
->
PrintShadow
(
screenposs
.
x
,
screenposs
.
y
-
26
,
COLOR_WHITE
(
255
)
,
hparmw
)
;
_snprintf_s
(
ping
,
sizeof
(
ping
)
-
1
,
"{F0FF0F}Skin{FFFFFF} %d{00FF00} Ping{FFFFFF} %d Score %d"
,
actor
->
base
.
model_alt_id
,
pPlayer
->
iPing
,
pPlayer
->
iScore
)
;
pD3DFont_sampStuff
->
PrintShadow
(
screenposs
.
x
,
screenposs
.
y
-
14
,
COLOR_WHITE
(
255
)
,
ping
)
;
_snprintf_s
(
pos
,
sizeof
(
pos
)
-
1
,
"Pos X %0.02f Y %0.02f Z %0.02f"
,
player_pos
.
x
,
player_pos
.
y
,
player_pos
.
z
)
;
//, g_Players->pRemotePlayer[i]->szPlayerName, i);
pD3DFont_sampStuff
->
PrintShadow
(
screenposs
.
x
,
screenposs
.
y
,
COLOR_WHITE
(
255
)
,
pos
)
;
}
}
}
BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L841) (https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L841)
_=Gigant=_
17.08.2018, 22:08
why this crashing i wanted to automatically exit car when car is about to explode
C++:
vehicle_info
*
my_veh
=
vehicle_info_get
(
VEHICLE_SELF
,
NULL
)
;
float
*
coord
=
new
float
[
3
]
;
coord
[
0
]
=
pPedSelf
->
GetPosition
(
)
->
fX
;
coord
[
1
]
=
pPedSelf
->
GetPosition
(
)
->
fY
-
2.0f
;
coord
[
2
]
=
pPedSelf
->
GetPosition
(
)
->
fZ
;
if
(
my_veh
->
hitpoints
==
200
)
// if vehicle hp is 200 then exit from car
{
GTAfunc_RemoveActorFromCarAndPutAt
(
coord
)
;
}
thanks for help
Dark_Knight
17.08.2018, 22:26
C++:
vehicle_info
*
my_veh
=
vehicle_info_get
(
VEHICLE_SELF
,
NULL
)
;
if
(
my_veh
)
{
float
coord
[
3
]
;
coord
[
0
]
=
pPedSelf
->
GetPosition
(
)
->
fX
;
coord
[
1
]
=
pPedSelf
->
GetPosition
(
)
->
fY
-
2.0f
;
coord
[
2
]
=
pPedSelf
->
GetPosition
(
)
->
fZ
;
if
(
my_veh
->
hitpoints
==
200
)
// if vehicle hp is 200 then exit from car
{
GTAfunc_RemoveActorFromCarAndPutAt
(
&
coord
)
;
}
}
Так то оно так, но лучше такую проверку:
Код:
[CODE]
if (my_veh->hitpoints
Ведь у нас не всегда именно 200 хп будет)
_=Gigant=_
18.08.2018, 02:30
how to get player current weapon name, here what i did
Код:
const struct weapon_entry *weapon = weapon_list;
sprintf(ctarget_wep, "{31f8ff}Weapon{FFFFFF} %s{FFFFFF} %u", gta_weapon_get_by_name(weapon->name), g_Players->pRemotePlayer[Target_PlayerID]->pPlayerData->onFootData.byteCurrentWeapon);
const struct weapon_entry weapon_list[] =
{
{ 0, 0, -1, "Fist" },
{ 1, 0, 331, "Brass Knuckles" },
{ 2, 1, 333, "Golf Club" },
{ 3, 1, 334, "Nitestick" },
{ 4, 1, 335, "Knife" },
{ 5, 1, 336, "Baseball Bat" },
{ 6, 1, 337, "Shovel" },
{ 7, 1, 338, "Pool Cue" },
{ 8, 1, 339, "Katana" },
{ 9, 1, 341, "Chainsaw" },
{ 22, 2, 346, "Pistol" },
{ 23, 2, 347, "Silenced Pistol" },
{ 24, 2, 348, "Desert Eagle" },
{ 25, 3, 349, "Shotgun" },
{ 26, 3, 350, "Sawn-Off Shotgun" },
{ 27, 3, 351, "SPAZ12" },
{ 28, 4, 352, "Micro UZI" },
{ 29, 4, 353, "MP5" },
{ 32, 4, 372, "Tech9" },
{ 30, 5, 355, "AK47" },
{ 31, 5, 356, "M4" },
{ 33, 6, 357, "Country Rifle" },
{ 34, 6, 358, "Sniper Rifle" },
{ 35, 7, 359, "Rocket Launcher" },
{ 36, 7, 360, "Heat Seeking RPG" },
{ 37, 7, 361, "Flame Thrower" },
{ 38, 7, 362, "Minigun" },
{ 16, 8, 342, "Grenade" },
{ 17, 8, 343, "Teargas" },
{ 18, 8, 344, "Molotov Cocktail" },
{ 39, 8, 363, "Remote Explosives" },
{ 41, 9, 365, "Spray Can" },
{ 42, 9, 366, "Fire Extinguisher" },
{ 43, 9, 367, "Camera" },
{ 10, 10, 321, "Dildo 1" },
{ 11, 10, 322, "Dildo 2" },
{ 12, 10, 323, "Vibe 1" },
{ 13, 10, 324, "Vibe 2" },
{ 14, 10, 325, "Flowers" },
{ 15, 10, 326, "Cane" },
{ 44, 11, 368, "NV Goggles" },
{ 45, 11, 369, "IR Goggles" },
{ 46, 11, 371, "Parachute" },
{ 40, 12, 364, "Detonator" },
{ -1, -1, -1, NULL }
};
but this shows
https://s33.postimg.cc/9kfw84r2n/Screenshot_2.jpg
thanks for help !
Babayka2016
18.08.2018, 03:16
Приветствую. Столкнулся с такой проблемой:
К примеру, есть координаты множества чекпоинтов, они расположены хаотично.
Есть координаты машины и поворот персонажа в ней:
Поворот персонажа:
public float Get_Rotation() {
int base_address = mem.ReadInt(0xB6F5F0);
float angel = mem.ReadFloat(base_address + 0x558);
return angel * 6;
}
Координаты машины:
public float[] Get_Car_Coord()
{
float[] Position = new float[2];
int car_offset = mem.ReadInt(0xBA18FC);
int offset_to_matrix_car = mem.ReadInt(car_offset + 0x14);
Position[0] = mem.ReadFloat(offset_to_matrix_car + 0x30);
Position[1] = mem.ReadFloat(offset_to_matrix_car + 0x34);
return Position;
}
Как мне сделать так, чтобы она могла проехать по маршруту чекпоинтов?
Мне нужно как-то взять тот угол, на который она должна повернуться.
Типа... Есть координаты чекпоинта:
x: 1141.513916
y: -1162.998169
И координаты машины:
x: 1162.112061
y: -1199.149658
Как сделать так, чтобы она туда приехала? Как вычислить тот угол, на который она должна повернуть?
Вообще, видел, что реализуют через функцию lua - getHeadingFromVector2d.
Как она вообще устроена? Как её перевести на другой язык, к примеру?
P.S НУЖНО БЕЗ SAMPFUNCS и SAMP LUA.
Заранее спасибо)
Dark_Knight
18.08.2018, 08:58
AsiPlugin от тима в помощь.
Как она вообще устроена?
C++:
#include
double
foo
(
double
x
,
double
y
)
{
return
atan2
(
y
,
x
)
;
}
возможно потребуется перевести в градусы
Как исправить?
Код:
||=== Build: Debug Win32 in SFPlugin (compiler: GNU GCC Compiler) ===|
C:\Documents and Settings\Admin\Рабочий стол\Новая папка\SFPlugin\main.cpp|6|fatal error: SAMPFUNCS_API.h: No such file or directory|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
C++:
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
init
=
true
;
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
switch
(
dwReasonForCall
)
{
case
DLL_PROCESS_ATTACH
:
SF
->
initPlugin
(
mainloop
,
hModule
)
;
break
;
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}
Файл SAMPFUNCS_API.h существует
Dark_Knight
18.08.2018, 14:11
Что в путях проекта стоит?
https://forum.antichat.xyz/attachments/27242559/
Как исправить?
Код:
||=== Build: Debug Win32 in SFPlugin (compiler: GNU GCC Compiler) ===|
C:\Documents and Settings\Admin\Рабочий стол\Новая папка\SFPlugin\main.cpp|6|fatal error: SAMPFUNCS_API.h: No such file or directory|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
C++:
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
init
=
true
;
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
switch
(
dwReasonForCall
)
{
case
DLL_PROCESS_ATTACH
:
SF
->
initPlugin
(
mainloop
,
hModule
)
;
break
;
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}
Файл SAMPFUNCS_API.h существует
В sln есть виртуальные директории или типа того. Что бы GCC подсосал файл по не верному пути надо ему об этом сказать через `-I`. qmake и qbs делают это автоматически. Но лучше исправить путь, ведь `SAMPFUNCS_API.h` и `main.cpp` лежат не в одной папке.
Что в путях проекта стоит?
https://forum.antichat.xyz/attachments/27242565/
SF API создан для visual studio (у тебя code::blocks). либо качай вс, либо переписывай апи под кб (но ты заебешся)
how to get player current weapon name, here what i did
Код:
const struct weapon_entry *weapon = weapon_list;
sprintf(ctarget_wep, "{31f8ff}Weapon{FFFFFF} %s{FFFFFF} %u", gta_weapon_get_by_name(weapon->name), g_Players->pRemotePlayer[Target_PlayerID]->pPlayerData->onFootData.byteCurrentWeapon);
const struct weapon_entry weapon_list[] =
{
{ 0, 0, -1, "Fist" },
{ 1, 0, 331, "Brass Knuckles" },
{ 2, 1, 333, "Golf Club" },
{ 3, 1, 334, "Nitestick" },
{ 4, 1, 335, "Knife" },
{ 5, 1, 336, "Baseball Bat" },
{ 6, 1, 337, "Shovel" },
{ 7, 1, 338, "Pool Cue" },
{ 8, 1, 339, "Katana" },
{ 9, 1, 341, "Chainsaw" },
{ 22, 2, 346, "Pistol" },
{ 23, 2, 347, "Silenced Pistol" },
{ 24, 2, 348, "Desert Eagle" },
{ 25, 3, 349, "Shotgun" },
{ 26, 3, 350, "Sawn-Off Shotgun" },
{ 27, 3, 351, "SPAZ12" },
{ 28, 4, 352, "Micro UZI" },
{ 29, 4, 353, "MP5" },
{ 32, 4, 372, "Tech9" },
{ 30, 5, 355, "AK47" },
{ 31, 5, 356, "M4" },
{ 33, 6, 357, "Country Rifle" },
{ 34, 6, 358, "Sniper Rifle" },
{ 35, 7, 359, "Rocket Launcher" },
{ 36, 7, 360, "Heat Seeking RPG" },
{ 37, 7, 361, "Flame Thrower" },
{ 38, 7, 362, "Minigun" },
{ 16, 8, 342, "Grenade" },
{ 17, 8, 343, "Teargas" },
{ 18, 8, 344, "Molotov Cocktail" },
{ 39, 8, 363, "Remote Explosives" },
{ 41, 9, 365, "Spray Can" },
{ 42, 9, 366, "Fire Extinguisher" },
{ 43, 9, 367, "Camera" },
{ 10, 10, 321, "Dildo 1" },
{ 11, 10, 322, "Dildo 2" },
{ 12, 10, 323, "Vibe 1" },
{ 13, 10, 324, "Vibe 2" },
{ 14, 10, 325, "Flowers" },
{ 15, 10, 326, "Cane" },
{ 44, 11, 368, "NV Goggles" },
{ 45, 11, 369, "IR Goggles" },
{ 46, 11, 371, "Parachute" },
{ 40, 12, 364, "Detonator" },
{ -1, -1, -1, NULL }
};
but this shows
https://s33.postimg.cc/9kfw84r2n/Screenshot_2.jpg
thanks for help !
const struct weapon_entry *weapon = &weapon_list[byteCurrentWeapon];
sprintf(buf, "weapon: %s", weapon->name);
_=Gigant=_
18.08.2018, 15:54
const struct weapon_entry *weapon = &weapon_list[byteCurrentWeapon];
sprintf(buf, "weapon: %s", weapon->name);
it shows name but incorrect for example if player use pistol it shows molotov cocktail but sometimes it show correct name like when player have Fist or Catana
i did it like this
stRemotePlayer *pPlayer = g_SAMP->pPools->pPlayer->pRemotePlayer[player_target];
const struct weapon_entry *weapon = &weapon_list[pPlayer->pPlayerData->onFootData.byteCurrentWeapon];
https://s33.postimg.cc/xuz279fhr/sa-mp-243.png
Babayka2016
18.08.2018, 16:07
Приветствую. Создаю бота, который ездит на машине.
Есть координаты машины и чекпоинта.
Как рассчитать угол между двумя точками, куда нужно повернуть машине?
P.S Без SAMPFUNCS и SAMP LUA.
it shows name but incorrect for example if player use pistol it shows molotov cocktail but sometimes it show correct name like when player have Fist or Catana
i did it like this
stRemotePlayer *pPlayer = g_SAMP->pPools->pPlayer->pRemotePlayer[player_target];
const struct weapon_entry *weapon = &weapon_list[pPlayer->pPlayerData->onFootData.byteCurrentWeapon];
https://s33.postimg.cc/xuz279fhr/sa-mp-243.png
C++:
stRemotePlayer
*
pPlayer
=
g_SAMP
->
pPools
->
pPlayer
->
pRemotePlayer
[
player_target
]
;
for
(
int
i
=
0
;
weapon_list
[
i
]
.
name
!=
nullptr
;
i
++
)
{
const
struct
weapon_entry
*
weapon
=
&
weapon_list
[
i
]
;
if
(
weapon
->
id
==
pPlayer
->
pPlayerData
->
onFootData
.
byteCurrentWeapon
)
{
sprintf
(
buf
,
"weapon: %s"
,
weapon
->
name
)
;
}
}
Dark_Knight
18.08.2018, 18:51
C++:
sprintf
(
buf
,
"weapon: %s"
,
weapon
->
name
)
;
Лучше после spintf добавить брик и заменить его на strcpy, а еще лучше юзать std::string
Приветствую. Столкнулся с такой проблемой:
К примеру, есть координаты множества чекпоинтов, они расположены хаотично.
Есть координаты машины и поворот персонажа в ней:
Поворот персонажа:
public float Get_Rotation() {
int base_address = mem.ReadInt(0xB6F5F0);
float angel = mem.ReadFloat(base_address + 0x558);
return angel * 6;
}
Координаты машины:
public float[] Get_Car_Coord()
{
float[] Position = new float[2];
int car_offset = mem.ReadInt(0xBA18FC);
int offset_to_matrix_car = mem.ReadInt(car_offset + 0x14);
Position[0] = mem.ReadFloat(offset_to_matrix_car + 0x30);
Position[1] = mem.ReadFloat(offset_to_matrix_car + 0x34);
return Position;
}
Как мне сделать так, чтобы она могла проехать по маршруту чекпоинтов?
Мне нужно как-то взять тот угол, на который она должна повернуться.
Типа... Есть координаты чекпоинта:
x: 1141.513916
y: -1162.998169
И координаты машины:
x: 1162.112061
y: -1199.149658
Как сделать так, чтобы она туда приехала? Как вычислить тот угол, на который она должна повернуть?
Вообще, видел, что реализуют через функцию lua - getHeadingFromVector2d.
Как она вообще устроена? Как её перевести на другой язык, к примеру?
P.S НУЖНО БЕЗ SAMPFUNCS и SAMP LUA.
Заранее спасибо)
Зажми клавишу W через key_event
Зажми клавишу W через key_event
У тебя не это спросили
Как рассчитать угол между двумя точками, куда нужно повернуть машине?
AsiPlugin(https://git.prime-hack.net/SR_team/AsiPlugin/src/branch/master/CGame/Types.cpp#L29) (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lQbHVnaW4vc3JjL2JyYW5jaC9tYXN0ZXIvQ0dhbWUvVHlwZXMu Y3BwI0wyOQ)
X и Y это дельты, как в опкоде CLEO
У SF плагина нет Makefile
Babayka2016
18.08.2018, 19:57
У тебя не это спросили
AsiPlugin(https://git.prime-hack.net/SR_team/AsiPlugin/src/branch/master/CGame/Types.cpp#L29) (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lQbHVnaW4vc3JjL2JyYW5jaC9tYXN0ZXIvQ0dhbWUvVHlwZXMu Y3BwI0wyOQ)
X и Y это дельты, как в опкоде CLEO
Получается, чтобы узнать угол -
angle(x_car-x_checkpoint, y_car-y_checkpoint);
Верно?
??
float angle = atan2(x_car - x_checkpoint, y_car - y_checkpoint);
angle += M_PI;
Получается, чтобы узнать угол -
angle(x_car-x_checkpoint, y_car-y_checkpoint);
Верно?
либо наоборот
Код:
C:\Новая папка\SFPlugin\SFPlugin\SFPlugin.vcxproj : warning : Невозможно найти средства сборки для Visual Studio 2012 - Windows XP (v110_xp). Установите Visual Studio 2012 - Windows XP (v110_xp), чтобы выполнить сборку с использованием средств сборки Visual Studio 2012 - Windows XP (v110_xp).
Открываю готовый проект SF, и пишет это
свойства проекта > свойства конфигурации > набор инструментов платформы > ставь что у тебя есть
Как сделать чтобы sf проект запускался на версиях ниже 2012??? p.s версия 2010
Dark_Knight
19.08.2018, 01:14
Как сделать чтобы sf проект запускался на версиях ниже 2012??? p.s версия 2010
Никак @_@
justblast
19.08.2018, 03:32
Как получить анимацию игрока в зоне прорисовки? Подскажите пожалуйста.
SF->getSAMP()->getPlayers()->GetPlayerAnimation(id);
SF->getSAMP()->getInfo()->pPools->pPlayer->GetPlayerAnimation(id);
SF->getSAMP()->getPlayers()->GetOnFootData(id)->sCurrentAnimationID;
Не подходят, они получают только ноли.
CleanLegend
19.08.2018, 12:00
Как получить анимацию игрока в зоне прорисовки? Подскажите пожалуйста.
SF->getSAMP()->getPlayers()->GetPlayerAnimation(id);
SF->getSAMP()->getInfo()->pPools->pPlayer->GetPlayerAnimation(id);
SF->getSAMP()->getPlayers()->GetOnFootData(id)->sCurrentAnimationID;
Не подходят, они получают только ноли.
C++:
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
onFootData
.
sAnimFlags
;
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
onFootData
.
sCurrentAnimationID
;
How to fix?
Установи DirectX SDK и подключи к проекту, на ютубе много гайдов по этой теме
why this not working
void Anims()
{
struct actor_info *self = actor_info_get(ACTOR_SELF, ACTOR_ALIVE);
if (FastWalk)
{
if (self == NULL)
return;
ScriptCommand(&anim_speed, ScriptActorId(self), "WALK_PLAYER", set.walk_speed);
}
}
this code above is in .cpp i included void Anims(); in .h file
Are you initializing script?
CleanLegend
19.08.2018, 14:14
what do you mean by initialized ? i puted void Anims(); in functions.h just like other stuff but it not works everything other works
C++:
GAME_SCRIPT_THREAD
*
gst
=
new
GAME_SCRIPT_THREAD
;
Babayka2016
20.08.2018, 23:59
Люди, спасайте. Как сделана функция getHeadingFromVector2d() в lua? Нужен именно исходный код.
Люди, спасайте. Как сделана функция getHeadingFromVector2d() в lua? Нужен именно исходный код.
тебе уже три раза скинули
-raymond-
21.08.2018, 14:12
как установить игроку метку на карте?
Babayka2016
21.08.2018, 17:20
тебе уже три раза скинули
Cуть в том, что значения, которые идут от getHeadingFromVector2d() в lua отличаются от тех, которые получаю я.
Lua:
https://forum.antichat.xyz/attachments/27244302/
Сам код LUA:
https://forum.antichat.xyz/attachments/27244302/
Что выдает функция в C#:
https://forum.antichat.xyz/attachments/27244302/
Код C#:
https://forum.antichat.xyz/attachments/27244302/
Пробовал в градусы:
https://forum.antichat.xyz/attachments/27244302/
Пробовал в радианы:
https://forum.antichat.xyz/attachments/27244302/
NOOBPAndA
22.08.2018, 10:57
1. С++ нужно писать в текстовом документе?
2. Чем открывать С++?
3. Куда кидать готовый С++ или его нужно открыать как АХК скрипты?
1. С++ нужно писать в текстовом документе?
2. Чем открывать С++?
3. Куда кидать готовый С++ или его нужно открыать как АХК скрипты?
1. Visual Studio
2. Руками
3. SAMPFUNCS - .sf | Корень игры - .asi и .dll
CleanLegend
23.08.2018, 13:27
why this raknet gives me crash i included everything what should be included :(
https://s33.postimg.cc/3ue40lt8v/Screenshot_2.jpg
after joining the game text appears it crash, i thought some other mods causes crash so i deleted all cleo mods sampfuncs and cleo and still crash
https://s33.postimg.cc/v4zf8j3vj/Screenshot_3.jpg
are you initialize raknet?
C++:
g_RakClient
=
new
RakClient
(
g_SAMP
->
pRakClientInterface
)
;
g_SAMP
->
pRakClientInterface
=
new
HookedRakClientInterface
(
)
;
CleanLegend
23.08.2018, 13:41
where to put that ?
after init samp
CleanLegend
23.08.2018, 13:57
sorry for spam but i cant find that init samp to much files where's that init samp which file
thank you for help
BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/proxyIDirect3DDevice9.cpp#L3146) (https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/proxyIDirect3DDevice9.cpp#L3146)
or you can use without init samp.
you need getmodulehandle samp.dll and get RakClientInterface
C++:
g_dwSAMP_Addr
+
SAMP_INFO_OFFSET
+
0x3C9
Как сделать такую же простую менюшку что бы при инжекте она была поверх всех окон, ну то есть прям как на скрине?
CleanLegend
26.08.2018, 20:16
Как сделать такую же простую менюшку что бы при инжекте она была поверх всех окон, ну то есть прям как на скрине?
Гайд - API SF | Урок 5 - Подключение ImGui(https://blast.hk/threads/23083/) (https://blast.hk/threads/23083/)
Гайд - API SF | Урок 5 - Подключение ImGui(https://blast.hk/threads/23083/) (https://blast.hk/threads/23083/)
это разве имгуи?
Гайд - API SF | Урок 5 - Подключение ImGui(https://blast.hk/threads/23083/) (https://blast.hk/threads/23083/)
Спасибо конечно, но я хотел попробовать сам, без ИмГуи, можно как-то?
CleanLegend
26.08.2018, 21:12
это разве имгуи?
Немного похоже
Спасибо конечно, но я хотел попробовать сам, без ИмГуи, можно как-то?
Тогда гугли d3d9 menu, изучай все и пытайся писать своё
Как правильно записать содержимое входящего пакета в структуру?
Код:
if (params->packetId == PacketEnumeration::ID_PLAYER_SYNC)
{
stOnFootData data;
ZeroMemory(&data, sizeof(data));
byte packetId;
uint16 senderId;
params->bitStream->ResetReadPointer();
params->bitStream->Read(packetId);
params->bitStream->Read(senderId);
params->bitStream->Read((PCHAR)&data, sizeof(data));
SF->getSAMP()->getChat()->AddChatMessage(-1, (std::to_string(senderId) + " || " + std::to_string(data.byteHealth)).c_str());
};
Ид я нормаьно получаю, а вот хп из структуры не могу получить, все время 0. Подскажите, пожалуйста.
Меня интересует конкретно такой способ. Я понимаю, что могу сделать SF->getSAMP()->getPlayers()->pRemotePlayer[senderId]->pPlayerData->onFootData.byteHealth
Как правильно записать содержимое входящего пакета в структуру?
Код:
if (params->packetId == PacketEnumeration::ID_PLAYER_SYNC)
{
stOnFootData data;
ZeroMemory(&data, sizeof(data));
byte packetId;
uint16 senderId;
params->bitStream->ResetReadPointer();
params->bitStream->Read(packetId);
params->bitStream->Read(senderId);
params->bitStream->Read((PCHAR)&data, sizeof(data));
SF->getSAMP()->getChat()->AddChatMessage(-1, (std::to_string(senderId) + " || " + std::to_string(data.byteHealth)).c_str());
};
Ид я нормаьно получаю, а вот хп из структуры не могу получить, все время 0. Подскажите, пожалуйста.
Меня интересует конкретно такой способ. Я понимаю, что могу сделать SF->getSAMP()->getPlayers()->pRemotePlayer[senderId]->pPlayerData->onFootData.byteHealth
P3ti/RakSAMP(https://github.com/P3ti/RakSAMP/blob/master/client/src/netgame.cpp#L127) (https://github.com/P3ti/RakSAMP/blob/master/client/src/netgame.cpp#L127)
how to detect if player is stationary = not moving ?
i tried this but nothing
if (g_Players->pLocalPlayer->onFootData.fMoveSpeed[0]
|| g_Players->pLocalPlayer->onFootData.fMoveSpeed[1]
|| g_Players->pLocalPlayer->onFootData.fMoveSpeed[2]
== 0)
BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/math_stuff.cpp#L34) (https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/math_stuff.cpp#L34)
CleanLegend
02.09.2018, 09:12
this code below is for rainbow but idk how to make these colors to change slower
D3DCOLOR_ARGB(255, (BYTE)(rand() % 255), (BYTE)(rand() % 255), (BYTE)(rand() % 255));
thanks for help !
GetTickCount
-raymond-
02.09.2018, 16:48
чем отловить инфу о том что игрок произвел выстрел?
и что здесь
https://i.imgur.com/r2UZYMJ.png
отвечает за хп машины?
CleanLegend
02.09.2018, 16:50
чем отловить инфу о том что игрок произвел выстрел?
Хуком bullet синхры
Musaigen
08.09.2018, 15:53
Как записать какое-либо значение в памяти?
Как записать какое-либо значение в памяти?
WriteProcessMemory если в другой процесс.
А если в свой, то:
C++:
*
(
int
*
)
0xB7CE50
=
1
;
Musaigen
08.09.2018, 18:16
WriteProcessMemory если в другой процесс.
А если в свой, то:
C++:
*
(
int
*
)
0xB7CE50
=
1
;
Данная фича не реагирует на тип bool, даже пробывал reinterpet_cast, хз как там. Вот как я делал.
C++:
*
(
bool
*
)
0xB7CEE4
=
true
;
// типо должен выдавать мне беск. бег, но нихуя.
Данная фича не реагирует на тип bool, даже пробывал reinterpet_cast, хз как там. Вот как я делал.
C++:
*
(
bool
*
)
0xB7CEE4
=
true
;
// типо должен выдавать мне беск. бег, но нихуя.
Попробуй это:
C++:
*
(
BYTE
*
)
0xB7CEE4
=
1
;
Musaigen
08.09.2018, 18:37
Попробуй это:
C++:
*
(
BYTE
*
)
0xB7CEE4
=
1
;
Не, не сработало. Видимо не суждено мне быть бесконечным бегуном.
Roger571
09.09.2018, 09:47
бесконечным бегуном.
Код:
memset_safe((void*)0x60A572, 0x90, 1);
Как вывести локально сообщение в asi?
Здравствуйте.
Заметил, что из за перехвата оконной процедуры(wndproc) через SetWindowLongPtr, при выгрузке плагина через консоль сф командой "pfree SFPlugin" происходит краш. В коллбэке деструктора игры и DLL PROCESS DETACH'e пытался восстанавливать оригинальный WndProc, но краш все равно был.
Может быть, кто нибудь знает, из за чего такое происходит?
C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#pragma comment(lib, "user32.lib")
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
WNDPROC oWndProc
=
0
;
LRESULT __stdcall
WndProc
(
HWND hWnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"WNDPROC CALLED"
)
;
return
CallWindowProcA
(
oWndProc
,
hWnd
,
uMsg
,
wParam
,
lParam
)
;
}
void
__stdcall
Destructor
(
)
{
static
bool
once
=
false
;
if
(
!
once
)
{
SetWindowLongPtr
(
GetForegroundWindow
(
)
,
GWLP_WNDPROC
,
(
long
)
oWndProc
)
;
once
=
true
;
}
}
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
||
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
||
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
oWndProc
=
(
WNDPROC
)
SetWindowLongPtr
(
GetForegroundWindow
(
)
,
GWLP_WNDPROC
,
(
long
)
WndProc
)
;
SF
->
getGame
(
)
->
registerGameDestructorCallback
(
Destructor
)
;
init
=
true
;
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
else
if
(
dwReasonForCall
==
DLL_PROCESS_DETACH
)
Destructor
(
)
;
return
TRUE
;
}
CleanLegend
10.09.2018, 05:50
Как вывести локально сообщение в asi?
BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L675) (https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L675)
why this not working i wanted to check when i'm driving to put gravity back to normal
if (cheat_state->state == CHEAT_STATE_ACTOR)
{
gta_gravity_set(10.0000);
}
else if (cheat_state->state == CHEAT_STATE_VEHICLE)
{
gta_gravity_set(0.0080);
}
cheat_state->state maybe can't change, check it
Здравствуйте.
Заметил, что из за перехвата оконной процедуры(wndproc) через SetWindowLongPtr, при выгрузке плагина через консоль сф командой "pfree SFPlugin" происходит краш. В коллбэке деструктора игры и DLL PROCESS DETACH'e пытался восстанавливать оригинальный WndProc, но краш все равно был.
Может быть, кто нибудь знает, из за чего такое происходит?
C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#pragma comment(lib, "user32.lib")
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
WNDPROC oWndProc
=
0
;
LRESULT __stdcall
WndProc
(
HWND hWnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"WNDPROC CALLED"
)
;
return
CallWindowProcA
(
oWndProc
,
hWnd
,
uMsg
,
wParam
,
lParam
)
;
}
void
__stdcall
Destructor
(
)
{
static
bool
once
=
false
;
if
(
!
once
)
{
SetWindowLongPtr
(
GetForegroundWindow
(
)
,
GWLP_WNDPROC
,
(
long
)
oWndProc
)
;
once
=
true
;
}
}
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
||
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
||
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
oWndProc
=
(
WNDPROC
)
SetWindowLongPtr
(
GetForegroundWindow
(
)
,
GWLP_WNDPROC
,
(
long
)
WndProc
)
;
SF
->
getGame
(
)
->
registerGameDestructorCallback
(
Destructor
)
;
init
=
true
;
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
else
if
(
dwReasonForCall
==
DLL_PROCESS_DETACH
)
Destructor
(
)
;
return
TRUE
;
}
в sf wndproc уже перехвачен, достаточно зарегать каллбек.
тут пример - Гайд - API SF | Урок 5 - Подключение ImGui(https://blast.hk/threads/23083/) (https://blast.hk/threads/23083/)
BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L675) (https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L675)
cheat_state->state maybe can't change, check it
в sf wndproc уже перехвачен, достаточно зарегать каллбек.
тут пример - Гайд - API SF | Урок 5 - Подключение ImGui(https://blast.hk/threads/23083/) (https://blast.hk/threads/23083/)
А можно ли как то сделать это без сф?
MISTER_GONWIK
11.09.2018, 09:20
А можно ли как то сделать это без сф?
нет, твой хук потом еще 40 раз какие-нибудь собейты, сфы перезапишут в итоге очередь не вернуть
нет, твой хук потом еще 40 раз какие-нибудь собейты, сфы перезапишут в итоге очередь не вернуть
Может можно выделить память (Чтобы при выгрузке функция осталось в процессе), записать туда функцию WndProc которая вызывает следующий WndProc, что бы не сломать очередь?
-raymond-
12.09.2018, 10:27
как отправить фейк анимацию
Roger571
12.09.2018, 10:53
как отправить фейк анимацию
Хукать онфут дату и редактировать параметры sCurrentAnimationID, sAnimFlags
-raymond-
12.09.2018, 11:11
как изменить текст уже отрендеренного текста?
Roger571
12.09.2018, 11:33
как изменить текст уже отрендеренного текста?
Смотря какого текста.
Если игрового, то через память.
А через д3д хук - сам решаешь, шо рендерить.
я уже отрендерил текст через д3д, как мне изменить текст на другой?
Ты можешь изменять данные каждый раз при вызове proxyIDirect3DDevice9::Present
Можешь посмотреть, как это реализовано в собейте (https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/proxyIDirect3DDevice9.cpp#L4135).
Может можно выделить память (Чтобы при выгрузке функция осталось в процессе), записать туда функцию WndProc которая вызывает следующий WndProc, что бы не сломать очередь?
Тоже об этом думал, но столкнулся с рядом проблем.
1) Не совсем уверен, правильно ли создаю функцию в динамической памяти, может быть есть более правильный способ?
C++:
void
func
(
)
{
// code
}
int
main
(
)
{
LPVOID memory
=
VirtualAlloc
(
0
,
/* Размер функции в байтах */
,
MEM_COMMIT
,
PAGE_EXECUTE_READWRITE
)
;
DWORD oldProtect
;
VirtualProtect
(
func
,
/* Размер функции*/
,
PAGE_EXECUTE_READWRITE
,
&
oldProtect
)
;
memcpy
(
memory
,
func
,
/* Размер функции */
)
;
VirtualProtect
(
func
,
/* Размер функции */
,
oldProtect
,
0
)
;
// memory - указатель на копию функции func в динамической памяти
}
2) С выделением функции и ее вызовом проблем нет, до выгрузки плагина из игры.
После выгрузки плагина из игры при первом вызове WNDPROC происходит краш.
То есть, если выгрузить плагин, и ничего не делать(не двигать курсор, не нажимать клавиши на клавиатуре), то краша, пока, не будет, до тех пор пока что то не начать делать.
Указатель на оригинальный WNDPROC выделяю динамически, сообщение в чат вовсе убрал.
Смотрел в отладчике, после выгрузки плагина указатель на указатель на оригинальный WNDPROC становится недоступным, тк он находится в самом плагине, который был выгружен. Ну, и, собственно, из за этого и происходит краш. Как исправить не знаю, может кто подскажет?
Неадекватная сова
13.09.2018, 16:49
Как убрать progressbar голода и аналогично, как получить текущее состояние голода?
Lua:
local
talb
=
{
hhh
=
"huy"
,
dd
=
"pd"
}
Как сделать такой-же массив в c++?
Lua:
local
talb
=
{
hhh
=
"huy"
,
dd
=
"pd"
}
Как сделать такой-же массив в c++?
C++:
typedef
struct
{
char
*
Name
;
char
*
Subname
;
}
NickNamesTable
;
NickNamesTable NickNames
=
{
"Rinat"
,
"Namazov"
}
;
Ну а если пофиг на index:
C++:
char
*
NickNames
[
]
=
{
"Rinat"
,
"Namazov"
}
;
Lua:
local
talb
=
{
hhh
=
"huy"
,
dd
=
"pd"
}
Как сделать такой-же массив в c++?
C++:
struct
talb_t
{
std
::
string hhh
=
"huy"
;
std
::
string dd
=
"pd"
;
}
;
Это просто структура, что бы к ней обращаться нужно еще и переменную создать
C++:
talb_t talb
;
Далее можно юзать
Код:
SF->Log(talb.hhh);
talb.dd = "new dd";
Как взять код с сайта как в F12?
-raymond-
23.09.2018, 14:51
не могу понять что значат параметр bs.Write(true);, и bs.Write(3);
C++:
BitStream bs
;
bs
.
Write
(
true
)
;
bs
.
Write
(
TargetID
)
;
bs
.
Write
(
(
float
)
damage
)
;
bs
.
Write
(
weapon_id
)
;
bs
.
Write
(
3
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPCEnumeration
::
RPC_GiveTakeDamage
,
&
bs
)
;
Babayka2016
23.09.2018, 16:43
Всем привет!
Есть такой вопрос:
Как можно получить указатель на машину, дверь которой дергает игрок?
К примеру, есть машина, она закрыта. Когда мы к ней подходим и пытаемся нажать на G / просто сесть в машину - он просто дергает ручку и не может в неё сесть. Вот нужно получить указатель на эту машину.
Или же, нужен offset для получения указателей всех машин в зоне прорисовки.
Помогите пожалуйста!
Нигде не могу найти.
P.S НУЖЕН ИМЕННО АДРЕС. БЕЗ ИСПОЛЬЗОВАНИЯ Sampfuncs, lua и прочего.
Roger571
23.09.2018, 18:56
не могу понять что значат параметр bs.Write(true);, и bs.Write(3);
C++:
BitStream bs
;
bs
.
Write
(
true
)
;
bs
.
Write
(
TargetID
)
;
bs
.
Write
(
(
float
)
damage
)
;
bs
.
Write
(
weapon_id
)
;
bs
.
Write
(
3
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPCEnumeration
::
RPC_GiveTakeDamage
,
&
bs
)
;
Посмотри структуру GiveTakeGamage, клац (https://blast.hk/wiki/samp:rpc_givetakedamage)
True - булево значение, говорит о получении урона.
3 - идентификатор кости скелета.
Babayka2016
27.09.2018, 16:25
Всем привет. Пытаюсь понять, как можно получить указатель на каждый элемент в пуле транспорта.
Полазил по сайтам, нашёл такое:
0xB6F980 - Указатель на начало пула транспорта (CVehicle)
CVehicle
Каждый транспорт как объект, равняется 2584 (0xA18) байтам и начинается с 0xC502AA0.
0xB74494 - Содержит указатель. Этот указатель:
+0 = Содержит указатель на первый элемент в пуле CVehicle
+4 = Содержит указатель на карту байтов показывающую какие элементы сейчас используются в пуле CVehicle
+8 = [dword] максимальное кол-во элементов в пуле CVehicle
+12 = [dword] текущее кол-во элементов в пуле CVehicle
Я лишь понял (с помощью 0xB74494 + 8) - что максимально CVehicle'а может быть 710.
Как я могу получить указатель на, к примеру, 5-й или 10-й элемент (из 710) из этого пула?
Типа, 0xB6F980 + 5 / 0xB6F980 + 10?
Помогите, пожалуйста, уже не знаю, куда писать-то
Babayka2016
28.09.2018, 18:57
Есть ли какой-нибудь offset, чтобы запихнуть игрока в машину?
P.S Без SAMPFUNCS и LUA
Howl1337
28.09.2018, 22:09
Помогите пожалуйста. Что выбирать чтобы писать dll читы и прочее
https://imgur.com/a/Ou92TJM
Imgur(https://imgur.com/a/Ou92TJM) (https://imgur.com/a/Ou92TJM)
Помогите пожалуйста. Что выбирать чтобы писать dll читы и прочее
https://imgur.com/a/Ou92TJM
Imgur(https://imgur.com/a/Ou92TJM) (https://imgur.com/a/Ou92TJM)
По стандарту все базовое стоит.
Howl1337
28.09.2018, 23:10
По стандарту все базовое стоит.
то есть без разницы что? может что-то мне потом пригодиться. не для сампа мне нужно
то есть без разницы что? может что-то мне потом пригодиться. не для сампа мне нужно
Все стоит по стандарту че надо, остальное в любом случае можно докачать через установщик.
Howl1337
28.09.2018, 23:21
Все стоит по стандарту че надо, остальное в любом случае можно докачать через установщик.
Дошло. думал обязательно что-то выбирать. Спасибо
CatKnight
29.09.2018, 15:54
Подскажите, пожалуйста, с регуляркой, то я конкретно заебался уже с ней. В RPC_ScrCreate3DTextLabel читаю text, перевожу в строку и потом ловлю (пытаюсь) уже regex_match значения нужные значения. Но мой шаблон не проходит, как бы не извращался. Текст, например, такой:
Код:
{FF9900}*** Дом занят ***
{FFFFFF}Номер дома: {AFAFAF}614
{FFFFFF}Класс дома: {AFAFAF}1
{FFFFFF}Владелец: {AFAFAF}Dima_Ganja
{FFFFFF}Дверь: {3D9829}Открыта
{FFFFFF}Гараж: [ {FA736C}НЕТ {FFFFFF}]
Нужно достать, допустим число 614. Пытался следующим образом но как-то не особо получилось, где трабол:
C++:
std
::
string str
=
std
::
string
(
text
)
;
std
::
smatch res
;
if
(
std
::
regex_match
(
str
,
res
,
std
::
regex
(
R"(/\}(\d+)/g)"
)
)
)
mrdiimax
30.09.2018, 01:23
Как при нажатии на кнопку из 1 имгуи окна перейти в другое? (Открытие 2-х окон сразу)
Как на asi локально сменить ник?
CleanLegend
03.10.2018, 19:03
Как на asi локально сменить ник?
BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L299) (https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L299)
-raymond-
05.10.2018, 17:45
дайте параметры для PacketEnumeration::ID_BULLET_SYNC
CleanLegend
05.10.2018, 18:10
дайте параметры для PacketEnumeration::ID_BULLET_SYNC
BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.h#L511) (https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.h#L511)
Babayka2016
06.10.2018, 21:44
Помогите, пытаюсь сделать ESP, посмотрел исходники на луа - все юзают convert3DCoordsToScreen. Как работает эта функция? Видел, что, к примеру, в CS - она использует View Matrix. Какой offset у View Matrix'a?
возможно ли, в DllMain или в потоке подключить/активировать класс CGameSA, но без d3d9 хука?
nt_qwark
09.10.2018, 03:45
Какие адресса у педа? X Y Z
И где хранятся педы? (Педы в локалке/Другие игроки в сампе или мта)
Неадекватная сова
09.10.2018, 10:24
Какие адресса у педа? X Y Z
И где хранятся педы? (Педы в локалке/Другие игроки в сампе или мта)
SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.fPosition[X];
X = 1, 2, 3 | X Y Z
Помогите, пытаюсь сделать ESP, посмотрел исходники на луа - все юзают convert3DCoordsToScreen. Как работает эта функция? Видел, что, к примеру, в CS - она использует View Matrix. Какой offset у View Matrix'a?
Тебе он не нужен. Просто используй имеющуюся в игре функцию:
C++:
CU CONVERT_WORLD_TO_SCREEN_POS_FUNC
=
0x70CE30
;
RwV2D
ConvertGlobalXYZToWindowScreenXY
(
RwV3D world
)
{
typedef
void
(
__cdecl
*
CWorld__ConvertGlobalXYZToScreenXY
)
(
RwV3D
*
world
,
RwV3D
*
screen
,
float
*
mulX
,
float
*
mulY
,
bool
unk
,
bool
unk2
)
;
RwV3D screen
;
float
mulX
,
mulY
;
(
CWorld__ConvertGlobalXYZToScreenXY
(
CONVERT_WORLD_TO_SCREEN_POS_FUNC
)
)
(
&
world
,
&
screen
,
&
mulX
,
&
mulY
,
false
,
false
)
;
return
{
screen
.
fX
,
screen
.
fY
}
;
}
Как на asi локально сменить ник?
AsiBase(https://git.prime-hack.net/SR_team/AsiBase/src/branch/master/CGame/SAMP/SAMPPlayerPool.cpp#L20) (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lCYXNlL3NyYy9icmFuY2gvbWFzdGVyL0NHYW1lL1NBTVAvU0FN UFBsYXllclBvb2wuY3BwI0wyMA)
CleanLegend
09.10.2018, 12:07
возможно ли, в DllMain или в потоке подключить/активировать класс CGameSA, но без d3d9 хука?
Да
Какие адресса у педа? X Y Z
И где хранятся педы? (Педы в локалке/Другие игроки в сампе или мта)
Можно на прямую искать через пул других педов:
C++:
[CODE]
for
(
int
i
=
0
;
i
лучше будет через samp, можно посмотреть структуры в собейте
Подскажите, пожалуйста, с регуляркой, то я конкретно заебался уже с ней. В RPC_ScrCreate3DTextLabel читаю text, перевожу в строку и потом ловлю (пытаюсь) уже regex_match значения нужные значения. Но мой шаблон не проходит, как бы не извращался. Текст, например, такой:
Код:
{FF9900}*** Дом занят ***
{FFFFFF}Номер дома: {AFAFAF}614
{FFFFFF}Класс дома: {AFAFAF}1
{FFFFFF}Владелец: {AFAFAF}Dima_Ganja
{FFFFFF}Дверь: {3D9829}Открыта
{FFFFFF}Гараж: [ {FA736C}НЕТ {FFFFFF}]
Нужно достать, допустим число 614. Пытался следующим образом но как-то не особо получилось, где трабол:
C++:
std
::
string str
=
std
::
string
(
text
)
;
std
::
smatch res
;
if
(
std
::
regex_match
(
str
,
res
,
std
::
regex
(
R"(/\}(\d+)/g)"
)
)
)
C++:
std
::
string str
=
std
::
string
(
text
)
;
std
::
smatch res
;
const
std
::
regex
re
(
R"((?:\{[0-9a-f]{6,8}\})?([\s\wа-я]+):\s(?:\{[0-9a-f]{6,8}\})?(\d+))"
,
std
::
regex
::
icase
)
;
if
(
std
::
regex_match
(
str
,
res
,
ку
)
)
{
if
(
res
[
1
]
.
str
(
)
==
"Номер дома"
)
MessageBoxA
(
0
,
res
[
2
]
.
str
(
)
.
data
(
)
,
"Номер дома"
,
MB_OK
)
;
}
Есть ли какой-нибудь offset, чтобы запихнуть игрока в машину?
P.S Без SAMPFUNCS и LUA
Нужно создать игровое событие или вызвать опкод. Пример первого есть в собе, пример второго в сампе
nt_qwark
09.10.2018, 18:51
[QUOTE="CleanLegend"]
Да
Можно на прямую искать через пул других педов:
C++:
[CODE]
for
(
int
i
=
0
;
i
В мта все что я читаю - нули. Т.е. адреса не валид
На сколько я знаю MTA античит блочит дебагеры и не только их...
В мта все что я читаю - нули. Т.е. адреса не валид
ты это юзаешь как mta SDK или редчишь клиент себе?
ты это юзаешь как mta SDK или редчишь клиент себе?
Если быть точнее, пытается написать чит на MTA
В мта все что я читаю - нули. Т.е. адреса не валид
Всё там валид, покажи как ты читаешь.
А вообще как и в сампе мта имеет собственную структуру педов в client.dll
каким образом можно посмотреть, активен ли поток .asi плагина(название плагина или потока)?
кроме MemHacker программы. может в чит энджейн как-то можно. подскажите, пожалуйста
CleanLegend
17.10.2018, 11:14
каким образом можно посмотреть, активен ли поток .asi плагина(название плагина или потока)?
кроме MemHacker программы. может в чит энджейн как-то можно. подскажите, пожалуйста
Через proccess hacker можно посмотреть
каким образом можно посмотреть, активен ли поток .asi плагина(название плагина или потока)?
кроме MemHacker программы. может в чит энджейн как-то можно. подскажите, пожалуйста
x64dbg (x86 ver), OllyDBG, IDA Pro Debugger
-raymond-
18.10.2018, 18:15
как отловить то что один игрок выстрелил в другого игрока и попал?
CleanLegend
18.10.2018, 18:41
как отловить то что один игрок выстрелил в другого игрока и попал?
Через входящую синхронизацию пуль
jenekbueno
20.10.2018, 01:39
в собейте, во входящих рпц, в частности RPC_ClientMessage при попытке перезаписать битстрим - краш, как я понял если длина новой строки больше чем старой, то поэтому крашит, в сф траблов не было с этим, кто понимает в чем проблема, помогите
Roger571
20.10.2018, 07:32
в собейте, во входящих рпц, в частности RPC_ClientMessage при попытке перезаписать битстрим - краш, как я понял если длина новой строки больше чем старой, то поэтому крашит, в сф траблов не было с этим, кто понимает в чем проблема, помогите
ClientMessage (https://github.com/P3ti/RakSAMP/blob/master/client/src/netrpc.cpp#L347)
Нужно записывать не только самому строку, но и ее новую длину dwStrLen (strlen)
jenekbueno
20.10.2018, 09:05
да неужели?) я как будто бы незнал)
https://forum.antichat.xyz/attachments/27263566/
Roger571
20.10.2018, 11:20
да неужели?) я как будто бы незнал)
bits->Reset();
Как проверить, что определённый игрок афк?
Как проверить, что определённый игрок афк?
C++:
// sf
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
ид игрока
]
->
pPlayerData
->
iAFKState
)
{
}
// собейт
if
(
g_Players
->
pRemotePlayer
[
ид игрока
]
->
pPlayerData
->
iAFKState
)
{
}
jenekbueno
21.10.2018, 12:07
bits->Reset();
не помогло)
upd:
логично что крашит, ведь изначально numberOfBitsOfData до перезаписи меньше из за длины строки, а если длина строки больше, то и размер больше будет, поэтому и крашит.
просто перезаписывать не получается, крашит, хз шо делать вот
-raymond-
21.10.2018, 15:57
как отправить пулю через стену?
допустим имея такой код
C++:
void
BulletData
(
float
aimHit
[
3
]
,
float
bodyPos
[
3
]
,
float
hitPos
[
3
]
,
BYTE hitType
,
uint16_t
id
)
{
stBulletData sync
;
ZeroMemory
(
&
sync
,
sizeof
(
stBulletData
)
)
;
sync
.
fOrigin
[
0
]
=
aimHit
[
0
]
;
sync
.
fOrigin
[
1
]
=
aimHit
[
1
]
;
sync
.
fOrigin
[
2
]
=
aimHit
[
2
]
;
sync
.
fTarget
[
0
]
=
bodyPos
[
0
]
;
sync
.
fTarget
[
1
]
=
bodyPos
[
1
]
;
sync
.
fTarget
[
2
]
=
bodyPos
[
2
]
;
sync
.
fCenter
[
0
]
=
hitPos
[
0
]
;
sync
.
fCenter
[
1
]
=
hitPos
[
1
]
;
sync
.
fCenter
[
2
]
=
hitPos
[
2
]
;
sync
.
byteType
=
hitType
;
sync
.
sTargetID
=
id
;
sync
.
byteWeaponID
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
BitStream BulletSync
;
BulletSync
.
Write
(
(
BYTE
)
PacketEnumeration
::
ID_BULLET_SYNC
)
;
BulletSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stBulletData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
BulletSync
)
;
UpdateAmmo
(
)
;
}
как отправить пулю через стену?
допустим имея такой код
C++:
void
BulletData
(
float
aimHit
[
3
]
,
float
bodyPos
[
3
]
,
float
hitPos
[
3
]
,
BYTE hitType
,
uint16_t
id
)
{
stBulletData sync
;
ZeroMemory
(
&
sync
,
sizeof
(
stBulletData
)
)
;
sync
.
fOrigin
[
0
]
=
aimHit
[
0
]
;
sync
.
fOrigin
[
1
]
=
aimHit
[
1
]
;
sync
.
fOrigin
[
2
]
=
aimHit
[
2
]
;
sync
.
fTarget
[
0
]
=
bodyPos
[
0
]
;
sync
.
fTarget
[
1
]
=
bodyPos
[
1
]
;
sync
.
fTarget
[
2
]
=
bodyPos
[
2
]
;
sync
.
fCenter
[
0
]
=
hitPos
[
0
]
;
sync
.
fCenter
[
1
]
=
hitPos
[
1
]
;
sync
.
fCenter
[
2
]
=
hitPos
[
2
]
;
sync
.
byteType
=
hitType
;
sync
.
sTargetID
=
id
;
sync
.
byteWeaponID
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
BitStream BulletSync
;
BulletSync
.
Write
(
(
BYTE
)
PacketEnumeration
::
ID_BULLET_SYNC
)
;
BulletSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stBulletData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
BulletSync
)
;
UpdateAmmo
(
)
;
}
Перед этим тебе необходимо отправить аим синхру
C++:
inline
float
vect3_length
(
const
float
in
[
3
]
)
{
return
sqrtf
(
in
[
0
]
*
in
[
0
]
+
in
[
1
]
*
in
[
1
]
+
in
[
2
]
*
in
[
2
]
)
;
}
inline
void
vect3_copy
(
const
float
in
[
3
]
,
float
out
[
3
]
)
{
memcpy
(
out
,
in
,
sizeof
(
float
)
*
3
)
;
}
void
AimVectorToPlayer
(
WORD player
)
// SAMP ID цели
{
stAimData aim
=
ASF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
aimData
;
actor_info
*
actorInfo
=
ASF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
player
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
float
matched_pos
[
3
]
,
AimVector
[
3
]
;
vect3_copy
(
actorInfo
->
base
.
matrix
+
12
,
matched_pos
)
;
float
*
fPos
=
actorInfo
->
base
.
matrix
+
12
;
for
(
int
i
=
0
;
i
getRakNet
(
)
->
SendPacket
(
&
bs
)
;
}
-raymond-
21.10.2018, 19:22
Перед этим тебе необходимо отправить аим синхру
C++:
inline
float
vect3_length
(
const
float
in
[
3
]
)
{
return
sqrtf
(
in
[
0
]
*
in
[
0
]
+
in
[
1
]
*
in
[
1
]
+
in
[
2
]
*
in
[
2
]
)
;
}
inline
void
vect3_copy
(
const
float
in
[
3
]
,
float
out
[
3
]
)
{
memcpy
(
out
,
in
,
sizeof
(
float
)
*
3
)
;
}
void
AimVectorToPlayer
(
WORD player
)
// SAMP ID цели
{
stAimData aim
=
ASF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
aimData
;
actor_info
*
actorInfo
=
ASF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
player
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
float
matched_pos
[
3
]
,
AimVector
[
3
]
;
vect3_copy
(
actorInfo
->
base
.
matrix
+
12
,
matched_pos
)
;
float
*
fPos
=
actorInfo
->
base
.
matrix
+
12
;
for
(
int
i
=
0
;
i
getRakNet
(
)
->
SendPacket
(
&
bs
)
;
}
Поставил, все равно нет попадания свозь стену
Поставил, все равно нет попадания свозь стену
Полный код в студию, надеюсь ты рпц урона после пули не забыл?
-raymond-
21.10.2018, 20:31
можешь скинуть код который будет возвращать aim sync в прошлое положение?
Musaigen
22.10.2018, 15:38
Как проверить то что игрок стреляет?
CleanLegend
22.10.2018, 15:49
Как проверить то что игрок стреляет?
можно в этой структуре
C++:
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
onFootData
.
stSampKeys
.
keys_primaryFire
либо через эту структуру, но её нет в SF
C++:
g_Players
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
pedFlags
.
bFiringWeapon
еще можно через анимку
можешь скинуть код который будет возвращать aim sync в прошлое положение?
Что мешает записывать в массив старый вектор перед отправкой?
Musaigen
24.10.2018, 16:36
Как можно получить id транспорта имея его vehicle_info?
И ещё, как проверить, то что игрок водит любую машину?
Как можно получить id транспорта имея его vehicle_info?
И ещё, как проверить, то что игрок водит любую машину?
Получение samp vehicle ида по vehicle_info
C++:
WORD
GetVehicleIdFromStruct
(
vehicle_info
*
vif
)
{
if
(
vif
==
nullptr
)
return
65535
;
for
(
WORD v
=
0
;
v
getSAMP
(
)
->
getVehicles
(
)
->
pGTA_Vehicle
[
v
]
)
return
v
;
}
return
65535
;
}
Проверка игрока на вождение
C++:
bool
IsPlayerDriving
(
WORD playerId
)
{
if
(
!
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
playerId
]
)
return
false
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
sLocalPlayerID
==
playerId
)
{
if
(
SF
->
getGame
(
)
->
getCurrentState
(
)
==
CHEAT_STATE_VEHICLE
&&
(
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
iIsListed
[
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
inCarData
.
sVehicleID
]
&&
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
iIsListed2
[
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
inCarData
.
sVehicleID
]
)
)
return
true
;
}
else
{
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
playerId
]
->
pPlayerData
->
bytePlayerState
==
PLAYER_STATE_DRIVER
)
return
true
;
}
return
false
;
}
-raymond-
26.10.2018, 16:20
пуля не отправляется через стену
C++:
void
BulletData
(
uint16_t
id
)
{
stBulletData sync
;
ZeroMemory
(
&
sync
,
sizeof
(
stBulletData
)
)
;
stRemotePlayer
*
pPlayer
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
;
if
(
!
pPlayer
)
return
;
float
aimHit
[
3
]
=
{
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
}
;
float
bodyPos
[
3
]
=
{
pPlayer
->
pPlayerData
->
fOnFootPos
[
0
]
,
pPlayer
->
pPlayerData
->
fOnFootPos
[
1
]
,
pPlayer
->
pPlayerData
->
fOnFootPos
[
2
]
}
;
float
hitPos
[
3
]
=
{
0.0
,
0.0
,
0.5
}
;
sync
.
fOrigin
[
0
]
=
aimHit
[
0
]
;
sync
.
fOrigin
[
1
]
=
aimHit
[
1
]
;
sync
.
fOrigin
[
2
]
=
aimHit
[
2
]
;
sync
.
fTarget
[
0
]
=
bodyPos
[
0
]
;
sync
.
fTarget
[
1
]
=
bodyPos
[
1
]
;
sync
.
fTarget
[
2
]
=
bodyPos
[
2
]
;
sync
.
fCenter
[
0
]
=
hitPos
[
0
]
;
sync
.
fCenter
[
1
]
=
hitPos
[
1
]
;
sync
.
fCenter
[
2
]
=
hitPos
[
2
]
;
sync
.
byteWeaponID
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
sync
.
byteType
=
1
;
sync
.
sTargetID
=
id
;
BitStream BulletSync
;
BulletSync
.
Write
(
(
BYTE
)
PacketEnumeration
::
ID_BULLET_SYNC
)
;
BulletSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stBulletData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
BulletSync
)
;
UpdateAmmo
(
)
;
}
inline
void
SendTakeDamageRPC
(
uint32_t
TargetID
,
unsigned
int
weapon_id
,
int
damage
)
{
BitStream bs
;
bs
.
Write
(
true
)
;
bs
.
Write
(
TargetID
)
;
bs
.
Write
(
(
float
)
damage
)
;
bs
.
Write
(
weapon_id
)
;
bs
.
Write
(
3
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPCEnumeration
::
RPC_GiveTakeDamage
,
&
bs
)
;
}
inline
float
vect3_length
(
const
float
in
[
3
]
)
{
return
sqrtf
(
in
[
0
]
*
in
[
0
]
+
in
[
1
]
*
in
[
1
]
+
in
[
2
]
*
in
[
2
]
)
;
}
inline
void
vect3_copy
(
const
float
in
[
3
]
,
float
out
[
3
]
)
{
memcpy
(
out
,
in
,
sizeof
(
float
)
*
3
)
;
}
void
AimVectorToPlayer
(
WORD player
)
// SAMP ID цели
{
stAimData aim
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
aimData
;
actor_info
*
actorInfo
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
player
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
float
matched_pos
[
3
]
,
AimVector
[
3
]
;
vect3_copy
(
actorInfo
->
base
.
matrix
+
12
,
matched_pos
)
;
float
*
fPos
=
actorInfo
->
base
.
matrix
+
12
;
for
(
int
i
=
0
;
i
getRakNet
(
)
->
SendPacket
(
&
bs
)
;
}
void
SendFakeParameters
(
int
id
)
{
AimVectorToPlayer
(
id
)
;
BulletData
(
id
)
;
SendTakeDamageRPC
(
id
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
,
11
)
;
}
пуля не отправляется через стену
C++:
void
BulletData
(
uint16_t
id
)
{
stBulletData sync
;
ZeroMemory
(
&
sync
,
sizeof
(
stBulletData
)
)
;
stRemotePlayer
*
pPlayer
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
;
if
(
!
pPlayer
)
return
;
float
aimHit
[
3
]
=
{
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
}
;
float
bodyPos
[
3
]
=
{
pPlayer
->
pPlayerData
->
fOnFootPos
[
0
]
,
pPlayer
->
pPlayerData
->
fOnFootPos
[
1
]
,
pPlayer
->
pPlayerData
->
fOnFootPos
[
2
]
}
;
float
hitPos
[
3
]
=
{
0.0
,
0.0
,
0.5
}
;
sync
.
fOrigin
[
0
]
=
aimHit
[
0
]
;
sync
.
fOrigin
[
1
]
=
aimHit
[
1
]
;
sync
.
fOrigin
[
2
]
=
aimHit
[
2
]
;
sync
.
fTarget
[
0
]
=
bodyPos
[
0
]
;
sync
.
fTarget
[
1
]
=
bodyPos
[
1
]
;
sync
.
fTarget
[
2
]
=
bodyPos
[
2
]
;
sync
.
fCenter
[
0
]
=
hitPos
[
0
]
;
sync
.
fCenter
[
1
]
=
hitPos
[
1
]
;
sync
.
fCenter
[
2
]
=
hitPos
[
2
]
;
sync
.
byteWeaponID
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
sync
.
byteType
=
1
;
sync
.
sTargetID
=
id
;
BitStream BulletSync
;
BulletSync
.
Write
(
(
BYTE
)
PacketEnumeration
::
ID_BULLET_SYNC
)
;
BulletSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stBulletData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
BulletSync
)
;
UpdateAmmo
(
)
;
}
inline
void
SendTakeDamageRPC
(
uint32_t
TargetID
,
unsigned
int
weapon_id
,
int
damage
)
{
BitStream bs
;
bs
.
Write
(
true
)
;
bs
.
Write
(
TargetID
)
;
bs
.
Write
(
(
float
)
damage
)
;
bs
.
Write
(
weapon_id
)
;
bs
.
Write
(
3
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPCEnumeration
::
RPC_GiveTakeDamage
,
&
bs
)
;
}
inline
float
vect3_length
(
const
float
in
[
3
]
)
{
return
sqrtf
(
in
[
0
]
*
in
[
0
]
+
in
[
1
]
*
in
[
1
]
+
in
[
2
]
*
in
[
2
]
)
;
}
inline
void
vect3_copy
(
const
float
in
[
3
]
,
float
out
[
3
]
)
{
memcpy
(
out
,
in
,
sizeof
(
float
)
*
3
)
;
}
void
AimVectorToPlayer
(
WORD player
)
// SAMP ID цели
{
stAimData aim
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
aimData
;
actor_info
*
actorInfo
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
player
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
float
matched_pos
[
3
]
,
AimVector
[
3
]
;
vect3_copy
(
actorInfo
->
base
.
matrix
+
12
,
matched_pos
)
;
float
*
fPos
=
actorInfo
->
base
.
matrix
+
12
;
for
(
int
i
=
0
;
i
getRakNet
(
)
->
SendPacket
(
&
bs
)
;
}
void
SendFakeParameters
(
int
id
)
{
AimVectorToPlayer
(
id
)
;
BulletData
(
id
)
;
SendTakeDamageRPC
(
id
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
,
11
)
;
}
Ясен трясен, во-первых тебе нужно sync.fOrigin[2] = aimHit[2]; рандомить немного чтобы античит на сало не выебал
Во-вторых у тебя разброс не может быть таким - его спалит любой античит старый, зайди в тему SF полезные функции в этом же разделе, я там вылаживал свою функу расчёта валидного разброса до нужной части тела.
И к слову, ты получаешь пешую позицию жертвы но не проверяешь пешком ли она, если будет в тачке будут траблы, нужно и для тачки позицию брать если чел в каре
-raymond-
26.10.2018, 17:30
на сервере без античита все равно не проходит пуля через стену
а как зарандомить aimhit[2]?
C++:
void
SendFakeParameters
(
int
id
)
{
float
TargetPos
[
3
]
,
Spread
[
3
]
;
// В Spread будет записан рассчитаный разброс
switch
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
bytePlayerState
)
{
case
PLAYER_STATE_ONFOOT
:
for
(
short
x
=
0
;
x
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
fOnFootPos
[
x
]
;
break
;
case
PLAYER_STATE_DRIVER
:
for
(
short
x
=
0
;
x
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
inCarData
.
fPosition
[
x
]
;
break
;
case
PLAYER_STATE_PASSENGER
:
for
(
short
x
=
0
;
x
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
passengerData
.
fPosition
[
x
]
;
break
;
}
byte BodyPart
=
CalculateSpreadOffset
(
id
,
TargetPos
,
Spread
)
;
AimVectorToPlayer
(
id
)
;
SendTakeDamageRPC
(
id
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
,
CalculateDamage
(
)
,
BodyPart
)
;
BulletData
(
id
)
;
}
CleanLegend
26.10.2018, 17:38
пуля не отправляется через стену
inline void SendTakeDamageRPC(uint32_t TargetID, unsigned int weapon_id, int damage)
{
BitStream bs;
bs.Write(true);
bs.Write(TargetID);
bs.Write((float)damage);
bs.Write(weapon_id);
bs.Write(3);
SF->getRakNet()->SendRPC(RPCEnumeration::RPC_GiveTakeDamage, &bs);
}
[/code]
Исправь первый параметр на false
а как зарандомить aimhit[2]?
C++:
int
a
=
1
+
rand
(
)
%
100
;
float
r_float
;
// 0.00 to 1.00
r_float
=
a
/
100.0
;
-raymond-
29.10.2018, 19:37
как получить координату определенной кости игрока?
как получить координату определенной кости игрока?
C++:
actor_info
*
actorInfo
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
идИгрока
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
if
(
actorInfo
==
nullptr
)
return
;
CPed
*
Ped
=
GAME
->
GetPools
(
)
->
GetPed
(
(
DWORD
*
)
actorInfo
)
;
if
(
Ped
==
nullptr
)
return
;
CVector bonePos
;
Ped
->
GetTransformedBonePosition
(
BONE_RIGHTWRIST
,
&
bonePos
)
;
-raymond-
30.10.2018, 13:25
в общем, узнал что на сервере такое условие
если камера смотрит больше чем на два метра от точки попадания пули, то кик
так вот, как мне направить камеру именно в те координаты куда должна попасть пуля
C++:
void
AimVectorToPlayer
(
WORD player
)
{
stAimData aim
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
aimData
;
actor_info
*
actorInfo
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
player
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
float
matched_pos
[
3
]
,
AimVector
[
3
]
;
vect3_copy
(
actorInfo
->
base
.
matrix
+
12
,
matched_pos
)
;
float
*
fPos
=
actorInfo
->
base
.
matrix
+
12
;
for
(
int
i
=
0
;
i
getRakNet
(
)
->
SendPacket
(
&
bs
)
;
}
void
SendFakeDamage
(
int
id
)
{
float
TargetPos
[
3
]
,
Spread
[
3
]
;
switch
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
bytePlayerState
)
{
case
PLAYER_STATE_ONFOOT
:
for
(
short
x
=
0
;
x
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
fOnFootPos
[
x
]
;
break
;
case
PLAYER_STATE_DRIVER
:
for
(
short
x
=
0
;
x
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
inCarData
.
fPosition
[
x
]
;
break
;
case
PLAYER_STATE_PASSENGER
:
for
(
short
x
=
0
;
x
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
passengerData
.
fPosition
[
x
]
;
break
;
}
byte BodyPart
=
CalculateSpreadOffset
(
id
,
TargetPos
,
Spread
)
;
AimVectorToPlayer
(
id
)
;
BulletData
(
TargetPos
,
Spread
,
1
,
id
)
;
SendTakeDamageRPC
(
id
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
,
16.0
,
BodyPart
)
;
}
CleanLegend
30.10.2018, 13:50
в общем, узнал что на сервере такое условие
если камера смотрит больше чем на два метра от точки попадания пули, то кик
так вот, как мне направить камеру именно в те координаты куда должна попасть пуля
C++:
void
AimVectorToPlayer
(
WORD player
)
{
stAimData aim
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
aimData
;
actor_info
*
actorInfo
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
player
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
float
matched_pos
[
3
]
,
AimVector
[
3
]
;
vect3_copy
(
actorInfo
->
base
.
matrix
+
12
,
matched_pos
)
;
float
*
fPos
=
actorInfo
->
base
.
matrix
+
12
;
for
(
int
i
=
0
;
i
getRakNet
(
)
->
SendPacket
(
&
bs
)
;
}
Функция AimVectorToPlayer направляет синхру прицеливания в сторону игрока, по другому сервер не может проверять, так что этого достаточно
-raymond-
30.10.2018, 14:38
я отправляю синхру на координаты игрока, а не на те координаты куда попадет пуля, поэтому меня кикает, потому что условие в античите такое
просто мне нужно узнать в какие координаты попадет пуля
я отправляю синхру на координаты игрока, а не на те координаты куда попадет пуля, поэтому меня кикает, потому что условие в античите такое
просто мне нужно узнать в какие координаты попадет пуля
Ну так возьми координаты кости к которой у тебя высчитывает разброс
-raymond-
30.10.2018, 20:48
так я получу кординаты кости относительно игрока, и как мне их реализовать в аим синхре?
так я получу кординаты кости относительно игрока, и как мне их реализовать в аим синхре?
У тебя есть функа для отправки вектора, просто вместо координат педа поставь туда от кости
-raymond-
31.10.2018, 17:21
как установить метку на карте по координатам
как установить метку на карте по координатам
C++:
[CODE]
if
(
(
*
(
int
*
)
0xBA6774
!=
0
)
)
{
for
(
int
i
=
0
;
i
-raymond-
31.10.2018, 18:27
[QUOTE="Rzeźnik"]
C++:
[CODE]
if
(
(
*
(
int
*
)
0xBA6774
!=
0
)
)
{
for
(
int
i
=
0
;
i
_=Gigant=_
02.11.2018, 01:14
is it possible to create imgui menu in sobeit source ? i tried to put ImGui::ShowDemoWindow(); in sobeit renderHandler but it crashes... do i need to include some libs or to define it somewhere else ?
is it possible to create imgui menu in sobeit source ? i tried to put ImGui::ShowDemoWindow(); in sobeit renderHandler but it crashes... do i need to include some libs or to define it somewhere else ?
You need to initialize the ImGui and call some functions in Reset, Present and WndProc.
Look this topic: https://blast.hk/threads/23083/
i puted
C++:
if
(
ImGui_ImplWin32_WndProcHandler
(
wnd
,
umsg
,
wparam
,
lparam
)
)
{
return
1l
;
}
in
Код:
static LRESULT CALLBACK wnd_proc ( HWND wnd, UINT umsg, WPARAM wparam, LPARAM lparam )
{
}
then
C++:
ImGui_ImplDX9_InvalidateDeviceObjects
(
)
;
in
Код:
HRESULT proxyIDirect3DDevice9::Reset(D3DPRESENT_PARAMETERS *pPresentationParameters)
and in
C++:
HRESULT proxyIDirect3DDevice9
::
Present
(
CONST RECT
*
pSourceRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindowOverride
,
CONST RGNDATA
*
pDirtyRegion
)
i puted
C++:
ImGui
::
CreateContext
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
(
void
)
io
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
hDestWindowOverride
,
origIDirect3DDevice9
)
;
and i called ImGui::ShowDemoWindow() in renderHandler(); but still crash
C++:
(
void
)
io
;
// WTF?! You casted reference on class to undefined type
i puted this now in Present
Код:
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO();
ImGuiStyle& style = ImGui::GetStyle();
io.IniFilename = NULL;
io.DeltaTime = 1.0f / 60.0f;
ImFont* pFont = io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\framd.ttf", 15);
SetCursor(io.MouseDrawCursor ? NULL : LoadCursor(NULL, IDC_ARROW));
io.Fonts->AddFontDefault();
style.AntiAliasedLines = false;
style.AntiAliasedFill = false;
style.WindowBorderSize = 0.0f;
ImGui_ImplWin32_Init(GetActiveWindow());
ImGui_ImplDX9_Init(hDestWindowOverride, origIDirect3DDevice9);
It's in mainloop
its not crashing and it draws the imgui mouse SetCursor but its not drawing ImGui::ShowDemoWindow(); or the imgui menu i created above
Connect imgui_demo.cpp
CleanLegend
02.11.2018, 17:13
i puted this now in Present
Код:
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO();
ImGuiStyle& style = ImGui::GetStyle();
io.IniFilename = NULL;
io.DeltaTime = 1.0f / 60.0f;
ImFont* pFont = io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\framd.ttf", 15);
SetCursor(io.MouseDrawCursor ? NULL : LoadCursor(NULL, IDC_ARROW));
io.Fonts->AddFontDefault();
style.AntiAliasedLines = false;
style.AntiAliasedFill = false;
style.WindowBorderSize = 0.0f;
ImGui_ImplWin32_Init(GetActiveWindow());
ImGui_ImplDX9_Init(hDestWindowOverride, origIDirect3DDevice9);
you calling inititiazing in cycle, need call init only one.
C++:
static
bool
inited
=
false
;
if
(
!
inited
)
{
ImGui
::
CreateContext
(
)
;
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
ImGuiStyle
&
style
=
ImGui
::
GetStyle
(
)
;
io
.
IniFilename
=
NULL
;
io
.
DeltaTime
=
1.0f
/
60.0f
;
ImFont
*
pFont
=
io
.
Fonts
->
AddFontFromFileTTF
(
"C:\\Windows\\Fonts\\framd.ttf"
,
15
)
;
SetCursor
(
io
.
MouseDrawCursor
?
NULL
:
LoadCursor
(
NULL
,
IDC_ARROW
)
)
;
io
.
Fonts
->
AddFontDefault
(
)
;
style
.
AntiAliasedLines
=
false
;
style
.
AntiAliasedFill
=
false
;
style
.
WindowBorderSize
=
0.0f
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
hDestWindowOverride
,
origIDirect3DDevice9
)
;
inited
=
true
;
}
в какой программе компилировать sf and asi?
DarkP1xel
04.11.2018, 13:54
в какой программе компилировать sf and asi?
В IDE.
Хочу, чтобы моя функция запускалась во время процедуры закрытия игры (/q и т.д).
Подскажите пожалуйста адрес, который точно используется только во время процедуры закрытия? Чтобы инъекцию туда сделать..
CleanLegend
04.11.2018, 21:11
Хочу, чтобы моя функция запускалась во время процедуры закрытия игры (/q и т.д).
Подскажите пожалуйста адрес, который точно используется только во время процедуры закрытия? Чтобы инъекцию туда сделать..
1)www.ПЕРВЫЕ ШАГИ.ru :: Шаг 98 - Функция DLLMain()(http://www.firststeps.ru/mfc/winapi/r.php?98) (https://www.blast.hk/redirect/aHR0cDovL3d3dy5maXJzdHN0ZXBzLnJ1L21mYy93aW5hcGkvci 5waHA_OTg) - DLL_PROCESS_DETACH
2) хукать деструктор игры
3) хукать отправку /q
в какой программе компилировать sf and asi?
Visual studio
1)www.ПЕРВЫЕ ШАГИ.ru :: Шаг 98 - Функция DLLMain()(http://www.firststeps.ru/mfc/winapi/r.php?98) (https://www.blast.hk/redirect/aHR0cDovL3d3dy5maXJzdHN0ZXBzLnJ1L21mYy93aW5hcGkvci 5waHA_OTg) - DLL_PROCESS_DETACH
2) хукать деструктор игры
3) хукать отправку /q
Я знаю как это делать, я же сказал, что буду инжектить. Я спрашивал, может кто знает какой-нибудь адрес, через который проходит игра во время закрытия :) может у кого есть под рукой
Я знаю как это делать, я же сказал, что буду инжектить. Я спрашивал, может кто знает какой-нибудь адрес, через который проходит игра во время закрытия :) может у кого есть под рукой
В собейте они есть.
Ctrl + F -> SAMP_HOOKENTER_CNETGAME_DESTR
-raymond-
05.11.2018, 15:29
как получить путь к файлу ini в папке SAMPFUNCS?
https://i.imgur.com/mkteaiQ.png
как получить путь к файлу ini в папке SAMPFUNCS?
https://i.imgur.com/mkteaiQ.png
C++:
char
WorkingDir
[
MAX_PATH
]
,
IniFile
[
MAX_PATH
]
;
GetCurrentDirectory
(
_countof
(
WorkingDir
)
,
WorkingDir
)
;
sprintf_s
(
IniFile
,
"%s\\SAMPFUNCS\\file.ini"
,
WorkingDir
)
;
Еще можно использовать GetModuleFileName для получения пути к твоему плагину, а не к процессу в который инжекнут плагин.
-raymond-
05.11.2018, 16:39
а как проверить что файл существует?
а как проверить что файл существует?
C++:
DWORD FileAttrib
;
FileAttrib
=
GetFileAttributes
(
IniFile
)
;
if
(
FileAttrib
==
(
DWORD
)
-
1
)
{
// Файл не найден.
}
Способов полно.
_=Gigant=_
05.11.2018, 20:45
is there anything in sobeit to check if chat input is opened ?
Как отправить сообщение через C++? (без собейта, а то немогу разобраться в нём)
is there anything in sobeit to check if chat input is opened ?
C++:
g_Input
->
iInputEnabled
CleanLegend
07.11.2018, 21:46
Как отправить сообщение через C++? (без собейта, а то немогу разобраться в нём)
C++:
(
(
void
(
__thiscall
*
)
(
void
*
_this
,
char
*
message
)
)
(
g_dwSAMP_Addr
+
SAMP_FUNC_SAY
)
)
(
g_Players
->
pLocalPlayer
,
msg
)
;
полная функция в собейте - BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L712) (https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L712)
Написал функцию, которая обновляет определённые строки чата после ввода команды.
Функция работает с помощью SF->getSAMP()->getChat()->chatEntry.
Но чат не обновляет, пробовал обновить с помощью Set.iMessagesReceived = 1;
В этом случае, она обновляется, но только после того как в чат приходит ещё одна строка.
В этом случае Set.iMessagesReceived = 0; она обновляется сразу, но на время происходит не плохая просадка ФПС.
Может подскажете, как ещё можно обновлять чат? Или какой-нибудь вариант без просадки ФПС
Может подскажете, как ещё можно обновлять чат? Или какой-нибудь вариант без просадки ФПС
Можно сэмулировать тройное нажатие F7.
Можно попробовать вызвать функцию (0x5D7B0), что вызывает и F7.
Функция является _thiscall'ом, в аргументы передать ChatInfo (0x21A0E4).
Адреса указаны для SAMP 0.3.7 R1.
всем привет. подскажите, пожалуйста, каким образом можно дебажить самп.длл вместе с игрой через Ida?
пробовал Attach to process - gta_sa.exe (запущенный) , видит асм код гташки, а сампа не может
Applaction: E:\gta_samp_037\gta_sa.exe
Input file: E:\gta_samp_037\samp.dll
Directory: E:\gta_samp_037
и потом запускать StartProcess, не получилось
всем привет. подскажите, пожалуйста, каким образом можно дебажить самп.длл вместе с игрой через Ida?
пробовал Attach to process - gta_sa.exe (запущенный) , видит асм код гташки, а сампа не может
Applaction: E:\gta_samp_037\gta_sa.exe
Input file: E:\gta_samp_037\samp.dll
Directory: E:\gta_samp_037
и потом запускать StartProcess, не получилось
Атачишся к процессу, и в списке модулей выбираешь адресное пространство сампа.
Атачишся к процессу, и в списке модулей выбираешь адресное пространство сампа.
в общем, я гружу gta_sa.idb, потом запускаю самп, выбираю тип дебаггера(WinDbg, LocalWin) Debuger - тестил оба.
дальше Debuger-Attach to process, выбираю gta_sa.exe.
все грузится. в списке модулей выбираю самп, перехожу по адресу - адреса есть, но байты будто пустые. ни один сампский хук не видит.
а еще в модуле есть загрузка samp.pdb файла, это нужно заливать? хотя у меня его нет
что я делаю не так?
в общем, я гружу gta_sa.idb, потом запускаю самп, выбираю тип дебаггера(WinDbg, LocalWin) Debuger - тестил оба.
дальше Debuger-Attach to process, выбираю gta_sa.exe.
все грузится. в списке модулей выбираю самп, перехожу по адресу - адреса есть, но байты будто пустые. ни один сампский хук не видит.
а еще в модуле есть загрузка samp.pdb файла, это нужно заливать? хотя у меня его нет
что я делаю не так?
Попробуй x64dbg (32-битную версию) у меня под ним нормально дебажит
Попробуй x64dbg (32-битную версию) у меня под ним нормально дебажит
поставил. после аттача показывает примерно 32766 строк gta_sa кода. с самп.длл тоже самое. почему половина кода не видит?:D
https://forum.antichat.xyz/attachments/27269793/
делаю так: Файл-Присоединиться-F9. перехожу на "Отладочные символы" - выбираю gta_sa.exe
почему половина кода не видит?:D
И где на скрине, то что нету кода?
И где на скрине, то что нету кода?
так на скрине показывает до 0x407FFF строки, т,е это начало кода. в гта их больше
C++:
(
(
void
(
__thiscall
*
)
(
void
*
_this
,
char
*
message
)
)
(
g_dwSAMP_Addr
+
SAMP_FUNC_SAY
)
)
(
g_Players
->
pLocalPlayer
,
msg
)
;
полная функция в собейте - BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L712) (https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L712)
Код:
((void(__thiscall *) (void *_this, char *message)) (g_dwSAMP_Addr + SAMP_FUNC_SAY)) (g_Players->pLocalPlayer, msg);
g_Players->pLocalPlayer то откуда взять? Я перерыл в поиске соба, не нашёл как заполняет pLocalPlayer.
так на скрине показывает до 0x407FFF строки, т,е это начало кода. в гта их больше
Я надеюсь ты не сравниваешь то что тебе показывает в ида? В запущеном виде часть памяти будет распределятся динамически, остальная часть кода разбросана по дллкам.
И советую дебагер всегда от админ прав запускать.
CleanLegend
08.11.2018, 18:28
Код:
((void(__thiscall *) (void *_this, char *message)) (g_dwSAMP_Addr + SAMP_FUNC_SAY)) (g_Players->pLocalPlayer, msg);
g_Players->pLocalPlayer то откуда взять? Я перерыл в поиске соба, не нашёл как заполняет pLocalPlayer.
BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/proxyIDirect3DDevice9.cpp#L3155) (https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/proxyIDirect3DDevice9.cpp#L3155)
Я надеюсь ты не сравниваешь то что тебе показывает в ида? В запущеном виде часть памяти будет распределятся динамически, остальная часть кода разбросана по дллкам.
И советую дебагер всегда от админ прав запускать.
закинул в папку дебагера плагины с гтихаба, теперь все адреса находят. большое спасибо)
как полностью выгрузить плагин с помощью pfree
Есть дочерний поток. После того как он закончил свою работу. Я хочу его выгрузить плагин. Но загрузить не могу потому что плагин еще использует gta_sa
C++:
void
ThreadEmulPressAlt
(
)
{
static
BitStream bsOnfootSync
;
static
stOnFootData ofSync
;
while
(
state
)
{
if
(
!
IsDriving
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
sLocalPlayerID
)
)
{
std
::
this_thread
::
sleep_for
(
std
::
chrono
::
milliseconds
(
curTimeOut
)
)
;
memset
(
&
ofSync
,
0
,
sizeof
(
stOnFootData
)
)
;
ofSync
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
ofSync
.
stSampKeys
.
keys_unknown__walkSlow
=
1
;
bsOnfootSync
.
ResetWritePointer
(
)
;
bsOnfootSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsOnfootSync
.
Write
(
(
PCHAR
)
&
ofSync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsOnfootSync
)
;
ofSync
.
stSampKeys
.
keys_unknown__walkSlow
=
0
;
bsOnfootSync
.
ResetWritePointer
(
)
;
bsOnfootSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsOnfootSync
.
Write
(
(
PCHAR
)
&
ofSync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsOnfootSync
)
;
g_mutex
.
lock
(
)
;
paramsCurSession
.
speeds
.
speedSend
++
;
g_mutex
.
unlock
(
)
;
}
}
}
Вызов
C++:
thd
=
new
std
::
thread
(
ThreadEmulPressAlt
)
;
как полностью выгрузить плагин с помощью pfree
Есть дочерний поток. После того как он закончил свою работу. Я хочу его выгрузить плагин. Но загрузить не могу потому что плагин еще использует gta_sa
C++:
void
ThreadEmulPressAlt
(
)
{
static
BitStream bsOnfootSync
;
static
stOnFootData ofSync
;
while
(
state
)
{
if
(
!
IsDriving
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
sLocalPlayerID
)
)
{
std
::
this_thread
::
sleep_for
(
std
::
chrono
::
milliseconds
(
curTimeOut
)
)
;
memset
(
&
ofSync
,
0
,
sizeof
(
stOnFootData
)
)
;
ofSync
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
ofSync
.
stSampKeys
.
keys_unknown__walkSlow
=
1
;
bsOnfootSync
.
ResetWritePointer
(
)
;
bsOnfootSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsOnfootSync
.
Write
(
(
PCHAR
)
&
ofSync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsOnfootSync
)
;
ofSync
.
stSampKeys
.
keys_unknown__walkSlow
=
0
;
bsOnfootSync
.
ResetWritePointer
(
)
;
bsOnfootSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsOnfootSync
.
Write
(
(
PCHAR
)
&
ofSync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsOnfootSync
)
;
g_mutex
.
lock
(
)
;
paramsCurSession
.
speeds
.
speedSend
++
;
g_mutex
.
unlock
(
)
;
}
}
}
Вызов
C++:
thd
=
new
std
::
thread
(
ThreadEmulPressAlt
)
;
ExitThread в потоке юзай
ExitThread в потоке юзай
не работает
C++:
void
ThreadEmulPressAlt
(
)
{
static
BitStream bsOnfootSync
;
static
stOnFootData ofSync
;
while
(
paramsCurSession
.
state
)
{
if
(
!
IsDriving
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
sLocalPlayerID
)
)
{
std
::
this_thread
::
sleep_for
(
std
::
chrono
::
milliseconds
(
paramsCurSession
.
curTimeOut
)
)
;
memset
(
&
ofSync
,
0
,
sizeof
(
stOnFootData
)
)
;
ofSync
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
ofSync
.
stSampKeys
.
keys_unknown__walkSlow
=
1
;
bsOnfootSync
.
ResetWritePointer
(
)
;
bsOnfootSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsOnfootSync
.
Write
(
(
PCHAR
)
&
ofSync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsOnfootSync
)
;
ofSync
.
stSampKeys
.
keys_unknown__walkSlow
=
0
;
bsOnfootSync
.
ResetWritePointer
(
)
;
bsOnfootSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsOnfootSync
.
Write
(
(
PCHAR
)
&
ofSync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsOnfootSync
)
;
g_mutex
.
lock
(
)
;
paramsCurSession
.
speeds
.
speedSend
++
;
g_mutex
.
unlock
(
)
;
}
}
ExitThread
(
0
)
;
}
Gradient function:
Код:
void RenderWindowBackground(int x, int y, int size_x, int size_y, int alpha)
{
D3DCOLOR first_color = D3DCOLOR_ARGB(ini.color.bgnd_first.alpha, ini.color.bgnd_first.red, ini.color.bgnd_first.green, ini.color.bgnd_first.blue);
D3DCOLOR second_color = D3DCOLOR_ARGB(ini.color.bgnd_second.alpha, ini.color.bgnd_second.red, ini.color.bgnd_second.green, ini.color.bgnd_second.blue);
if (alpha) {
first_color = D3DCOLOR_ARGB(alpha, ini.color.bgnd_first.red, ini.color.bgnd_first.green, ini.color.bgnd_first.blue);
second_color = D3DCOLOR_ARGB(alpha, ini.color.bgnd_second.red, ini.color.bgnd_second.green, ini.color.bgnd_second.blue);
}
pD3DHook->pRender->D3DGradient(x, y, size_x, size_y, first_color, second_color);
}
Use:
Код:
ImGui::RenderWindowBackground(ImGui::GetWindowPos( ).x, ImGui::GetWindowPos().y, ImGui::GetWindowSize().x, ImGui::GetWindowSize().y);
Господа, вылетает иногда GTA при Shift+0 , я так понял нужно дополнительное обнуление каких-либо данных, кто-то же все-таки сталкивался с данной проблемой, Как поправить?
Господа, вылетает иногда GTA при Shift+0 , я так понял нужно дополнительное обнуление каких-либо данных, кто-то же все-таки сталкивался с данной проблемой, Как поправить?
Для начала дать нам свой говнокод на анализ
От FYP собейт для 0.3.7 на некоторых все в порядке, на некоторых нет, возможно дело обстоит с повторным удалением уже удаленных объектов? Как думаете?
Для начала дать нам свой говнокод на анализ
От FYP собейт для 0.3.7 на некоторых все в порядке, на некоторых нет, возможно дело обстоит с повторным удалением уже удаленных объектов? Как думаете?
Ты туго догоняешь я не пойму? Давай свой код а там и посмотрим, я не слышал чтобы на бх заходили победители битвы экстрасенсов.
////
#define SAMP_FUNC_RESTARTGAME 0xA060
/////
if (KEYCOMBO_PRESSED(set.key_rejoin))
{
disconnect(0);
restartGame();
cheat_state_text("Реконнект через %d секунд...", set.rejoin_delay / 1000);
cheat_state->_generic.rejoinTick = GetTickCount();
}
/////////////////////////
void restartGame()
{
if (g_SAMP == NULL)
return;
((void(__thiscall *) (void *)) (g_dwSAMP_Addr + SAMP_FUNC_RESTARTGAME)) (g_SAMP);
}
//////////
uint32_t samp_dll = getSampAddress();
g_dwSAMP_Addr = (uint32_t) samp_dll;
uint32_t getSampAddress()
{
if (set.run_mode == RUNMODE_SINGLEPLAYER)
return 0x0;
uint32_t samp_dll;
if (set.run_mode == RUNMODE_SAMP)
{
if (set.wine_compatibility)
{
samp_dll = (uint32_t) LoadLibrary(SAMP_DLL);
}
else
{
samp_dll = (uint32_t) dll_baseptr_get(SAMP_DLL);
}
}
return samp_dll;
}
////////
_=Gigant=_
12.11.2018, 19:50
how to convert this ?
https://i.postimg.cc/NGJDpSj2/Screenshot-1.jpg
Неадекватная сова
13.11.2018, 11:08
how to convert this ?
https://i.postimg.cc/NGJDpSj2/Screenshot-1.jpg
ImGui::ColorConvertU32ToFloat4()
jenekbueno
13.11.2018, 11:50
привет.
как заполнить 1 пиксель на экране определённым цветом методами рендера ( mod_sa, sf api) ?
Неадекватная сова
13.11.2018, 18:07
local color = sampGetPlayerColor (id)
D3DCOLOR playerColor = SF->getSAMP()->getPlayers()->GetPlayerColor(id)
local r, g, b = bitex.bextract (color, 16, 8), bitex.bextract (color, 8, 8), bitex.bextract (color, 0, 8)
Try SF->getRender()->ARGB_To_A_R_G_B(playerColor, A, R, G, B)
_=Gigant=_
14.11.2018, 18:15
whats wrong with this it should show text depending on time pass but it shows nothing....
static DWORD dwShowTick;
dwShowTick = GetTickCount ();
if (GetTickCount () - dwShowTick == 10000)
{
addMessage("10 sec");
}
else if (GetTickCount () - dwShowTick == 20000) // i also puted > 20000 but still not working
{
addMessage("20 sec");
}
-raymond-
14.11.2018, 19:47
как узнать ид игрока который отправил пакет?
C++:
bool
CALLBACK
incomingData
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
PacketEnumeration
::
ID_BULLET_SYNC
)
{
stBulletData data
;
memset
(
&
data
,
0
,
sizeof
(
stBulletData
)
)
;
// обнуляем
byte packet
;
params
->
bitStream
->
ResetReadPointer
(
)
;
// на всякий случай устанавливаем оффсет чтения на начало
params
->
bitStream
->
Read
(
packet
)
;
// читаем ID пакета
params
->
bitStream
->
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stBulletData
)
)
;
// читаем отправляемые данные
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
0xDFFFFF
,
"sTargetID: %d"
,
data
.
sTargetID
)
;
}
;
return
true
;
}
;
как узнать ид игрока который отправил пакет?
C++:
bool
CALLBACK
incomingData
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
PacketEnumeration
::
ID_BULLET_SYNC
)
{
stBulletData data
;
memset
(
&
data
,
0
,
sizeof
(
stBulletData
)
)
;
// обнуляем
byte packet
;
params
->
bitStream
->
ResetReadPointer
(
)
;
// на всякий случай устанавливаем оффсет чтения на начало
params
->
bitStream
->
Read
(
packet
)
;
// читаем ID пакета
params
->
bitStream
->
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stBulletData
)
)
;
// читаем отправляемые данные
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
0xDFFFFF
,
"sTargetID: %d"
,
data
.
sTargetID
)
;
}
;
return
true
;
}
;
C++:
bool
CALLBACK
incomingData
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
PacketEnumeration
::
ID_BULLET_SYNC
)
{
stBulletData data
=
{
0
}
;
WORD id
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
IgnoreBits
(
8
)
;
params
->
bitStream
->
Read
(
id
)
;
params
->
bitStream
->
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stBulletData
)
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
0xDFFFFF
,
"ID: %d"
,
id
)
;
}
return
true
;
}
Musaigen
14.11.2018, 21:47
Влияет ли на работоспособность RakNet Хука ResetReadPointer()?
Влияет ли на работоспособность RakNet Хука ResetReadPointer()?
Не влияет. Он просто курсор чтения переводит на начало bitstream.
checkdasound
15.11.2018, 00:06
Как можно сделать активацию чит-кодом помимо проверки на несколько нажатых клавиш?
checkdasound
15.11.2018, 16:19
Почему при инжекте dll в уже запущенную игру, все работает, а при переименовании в asi, после запуска игры сразу краш.
Код:
#include
#include
#include "main.h"
bool pStatus = false;
unsigned int CurrentCharPointer = *(unsigned int*)0xB6F5F0;
void __cdecl func(void *pArg)
{
*reinterpret_cast(0x004B35A0) = 0x560CEC83;
*reinterpret_cast(0x004B35A4) = 0xF18B;
while (true)
{
Sleep(50);
if (GetAsyncKeyState(0x47))
{
pStatus = !pStatus;
if (pStatus == true)
{
AddMessageJumpQ("~g~[ON]", 500, NULL, false); // 500 - ms
}
else
{
AddMessageJumpQ("~r~[OFF]", 500, NULL, false); // 500 - ms
}
}
if (pStatus == true)
{
*reinterpret_cast(0x96916D) = 1; // bullet
*reinterpret_cast(0xB7CEE6) = 1; // fire
*(unsigned char*)(CurrentCharPointer + 66) = 0xCC; // all
} else
{
*reinterpret_cast(0x96916D) = 0; // bullet
*reinterpret_cast(0xB7CEE6) = 0; // fire
*(unsigned char*)(CurrentCharPointer + 66) = 0; // all
}
}
}
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ PVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
_beginthread(func, NULL, nullptr);
}
return TRUE;
}
Код:
#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);
}
CleanLegend
15.11.2018, 19:47
Почему при инжекте dll в уже запущенную игру, все работает, а при переименовании в asi, после запуска игры сразу краш.
Код:
#include
#include
#include "main.h"
bool pStatus = false;
unsigned int CurrentCharPointer = *(unsigned int*)0xB6F5F0;
void __cdecl func(void *pArg)
{
*reinterpret_cast(0x004B35A0) = 0x560CEC83;
*reinterpret_cast(0x004B35A4) = 0xF18B;
while (true)
{
Sleep(50);
if (GetAsyncKeyState(0x47))
{
pStatus = !pStatus;
if (pStatus == true)
{
AddMessageJumpQ("~g~[ON]", 500, NULL, false); // 500 - ms
}
else
{
AddMessageJumpQ("~r~[OFF]", 500, NULL, false); // 500 - ms
}
}
if (pStatus == true)
{
*reinterpret_cast(0x96916D) = 1; // bullet
*reinterpret_cast(0xB7CEE6) = 1; // fire
*(unsigned char*)(CurrentCharPointer + 66) = 0xCC; // all
} else
{
*reinterpret_cast(0x96916D) = 0; // bullet
*reinterpret_cast(0xB7CEE6) = 0; // fire
*(unsigned char*)(CurrentCharPointer + 66) = 0; // all
}
}
}
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ PVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
_beginthread(func, NULL, nullptr);
}
return TRUE;
}
Код:
#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);
}
Поставь в потоке проверку на загрузку игры
NarutoUA
15.11.2018, 19:53
Почему при инжекте dll в уже запущенную игру, все работает, а при переименовании в asi, после запуска игры сразу краш.
Код:
#include
#include
#include "main.h"
bool pStatus = false;
unsigned int CurrentCharPointer = *(unsigned int*)0xB6F5F0;
void __cdecl func(void *pArg)
{
*reinterpret_cast(0x004B35A0) = 0x560CEC83;
*reinterpret_cast(0x004B35A4) = 0xF18B;
while (true)
{
Sleep(50);
if (GetAsyncKeyState(0x47))
{
pStatus = !pStatus;
if (pStatus == true)
{
AddMessageJumpQ("~g~[ON]", 500, NULL, false); // 500 - ms
}
else
{
AddMessageJumpQ("~r~[OFF]", 500, NULL, false); // 500 - ms
}
}
if (pStatus == true)
{
*reinterpret_cast(0x96916D) = 1; // bullet
*reinterpret_cast(0xB7CEE6) = 1; // fire
*(unsigned char*)(CurrentCharPointer + 66) = 0xCC; // all
} else
{
*reinterpret_cast(0x96916D) = 0; // bullet
*reinterpret_cast(0xB7CEE6) = 0; // fire
*(unsigned char*)(CurrentCharPointer + 66) = 0; // all
}
}
}
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ PVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
_beginthread(func, NULL, nullptr);
}
return TRUE;
}
Код:
#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);
}
VirtualProtect
checkdasound
15.11.2018, 20:13
Поставь в потоке проверку на загрузку игры
Разве аси лоадер не делает это за меня?
VirtualProtect
Не совсем понял, где использовать, ставить флаги на адреса памяти, в которые я записываю значения?
NarutoUA
15.11.2018, 22:49
Разве аси лоадер не делает это за меня?
Не совсем понял, где использовать, ставить флаги на адреса памяти, в которые я записываю значения?
да, PAGE_READWRITE_EXECUTE
jenekbueno
16.11.2018, 03:12
чё не так?
https://forum.antichat.xyz/attachments/27272076/
Black_Bird
16.11.2018, 12:53
Заданный одномерный массив А (10). Найти произведение a [1] * 2 * a [2] * ... * 10 * a [10]. Заданный массив отсортировать методом выбора по возрастанию.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot