 |
|

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

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

19.09.2022, 00:23
|
|
Участник форума
Регистрация: 27.05.2021
Сообщений: 140
С нами:
2614229
Репутация:
33
|
|
возможно ли это сделать в .asi? есть какой-нибудь пример?
Lua:
Код:
local
encoding
=
require
'encoding'
-- подключаем для корректной отправки русских букв
encoding
.
default
=
'CP1251'
u8
=
encoding
.
UTF8
local
sampev
=
require
'lib.samp.events'
-- подключаем для хука отправки ответа на диалог
local
effil
=
require
'effil'
-- для ассинхронных запросов
local
url
=
'URL'
local
data
=
{
[
'content'
]
=
''
,
-- текст (меняется через команду, так что можно оставить пустым)
[
'username'
]
=
'Sended from .lua script!'
,
-- ник отправителя
[
'avatar_url'
]
=
'https://c.tenor.com/Z9mXH7-MlcsAAAAS/sexy-black-man-thirst-trap.gif'
,
-- ссылка на аватарку (можно убрать, будет дефолтная)
[
'tts'
]
=
false
,
-- tts - text to speech - читалка сообщений (true/false)
-- так же можно сделать еще много чего, подробнее тут: https://discord.com/developers/docs/resources/webhook
}
function
main
(
)
while
not
isSampAvailable
(
)
do
wait
(
0
)
end
sampRegisterChatCommand
(
'ds.msg'
,
function
(
arg
)
data
[
'username'
]
=
sampGetPlayerNickname
(
select
(
2
,
sampGetPlayerIdByCharHandle
(
PLAYER_PED
)
)
)
-- ник отправителя = ник в игре
data
[
'content'
]
=
arg
-- делаем что бы текст сообщения был равен тексту который мы ввели после команды
-- отправляем запрос
asyncHttpRequest
(
'POST'
,
url
,
{
headers
=
{
[
'content-type'
]
=
'application/json'
}
,
data
=
u8
(
encodeJson
(
data
)
)
}
,
function
(
response
)
print
(
'[WebHook] [OK] отправлено!'
)
end
,
function
(
err
)
print
(
'[WebHook] [ERROR] error: '
..
err
)
end
)
end
)
wait
(
-
1
)
end
-- функция для отправки ассинхронных сообщений
function
asyncHttpRequest
(
method
,
url
,
args
,
resolve
,
reject
)
local
request_thread
=
effil
.
thread
(
function
(
method
,
url
,
args
)
local
requests
=
require
'requests'
local
result
,
response
=
pcall
(
requests
.
request
,
method
,
url
,
args
)
if
result
then
response
.
json
,
response
.
xml
=
nil
,
nil
return
true
,
response
else
return
false
,
response
end
end
)
(
method
,
url
,
args
)
-- Если запрос без функций обработки ответа и ошибок.
if
not
resolve
then
resolve
=
function
(
)
end
end
if
not
reject
then
reject
=
function
(
)
end
end
-- Проверка выполнения потока
lua_thread
.
create
(
function
(
)
local
runner
=
request_thread
while
true
do
local
status
,
err
=
runner
:
status
(
)
if
not
err
then
if
status
==
'completed'
then
local
result
,
response
=
runner
:
get
(
)
if
result
then
resolve
(
response
)
else
reject
(
response
)
end
return
elseif
status
==
'canceled'
then
return
reject
(
status
)
end
else
return
reject
(
err
)
end
wait
(
0
)
end
end
)
end
|
|
|

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

19.09.2022, 03:21
|
|
Флудер
Регистрация: 02.02.2019
Сообщений: 5,070
С нами:
3831395
Репутация:
183
|
|
Сообщение от Lamprecht
Знает кто нибудь адрес setPageSize для 0.3 дл?
0x66D10
|
|
|

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

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

22.09.2022, 18:18
|
|
Новичок
Регистрация: 22.09.2022
Сообщений: 3
С нами:
1918164
Репутация:
1
|
|
всем привет,не могу понять как фиксится данная проблема? хочу поставить в ImGui русский язык но u8 не работает:

|
|
|

22.09.2022, 18:43
|
|
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами:
2055431
Репутация:
3
|
|
Есть ли wiki по функциям сампфункса, как у луа?
|
|
|

23.09.2022, 10:19
|
|
Постоянный
Регистрация: 20.03.2021
Сообщений: 666
С нами:
2711257
Репутация:
83
|
|
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|