
17.10.2022, 18:08
|
|
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами:
2055431
Репутация:
3
|
|
Как проверить ид на существование? Пробовал вот так:
C++:
Код:
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
isListed
[
std
::
stoi
(
id
)
]
!=
1
&&
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
remotePlayerInfo
[
std
::
stoi
(
id
)
]
==
NULL
&&
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
remotePlayerInfo
[
std
::
stoi
(
id
)
]
->
data
==
NULL
&&
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
remotePlayerInfo
[
std
::
stoi
(
id
)
]
->
data
->
sampActor
==
NULL
&&
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
remotePlayerInfo
[
std
::
stoi
(
id
)
]
->
data
->
sampActor
->
gtaPed
==
NULL
)
// "id" - аргумент команды
{
AddChat
(
-
1
,
"Плеер потерялся :/."
)
;
// функция AddChat() объявлена в main.hpp
}
else
{
// действия с ID
}
Но если ввожу ID, которого нет на сервере - крашит
|
|
|

17.10.2022, 18:32
|
|
Участник форума
Регистрация: 21.07.2020
Сообщений: 280
С нами:
3059886
Репутация:
68
|
|
Сообщение от egaa
Как проверить ид на существование? Пробовал вот так:
C++:
Код:
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
isListed
[
std
::
stoi
(
id
)
]
!=
1
&&
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
remotePlayerInfo
[
std
::
stoi
(
id
)
]
==
NULL
&&
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
remotePlayerInfo
[
std
::
stoi
(
id
)
]
->
data
==
NULL
&&
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
remotePlayerInfo
[
std
::
stoi
(
id
)
]
->
data
->
sampActor
==
NULL
&&
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
remotePlayerInfo
[
std
::
stoi
(
id
)
]
->
data
->
sampActor
->
gtaPed
==
NULL
)
// "id" - аргумент команды
{
AddChat
(
-
1
,
"Плеер потерялся :/."
)
;
// функция AddChat() объявлена в main.hpp
}
else
{
// действия с ID
}
Но если ввожу ID, которого нет на сервере - крашит
достаточно одного SF->getSAMP()->getPlayers()->isListed[std::stoi(id)] на сколько помню
|
|
|

17.10.2022, 18:50
|
|
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами:
2055431
Репутация:
3
|
|
Сообщение от MeG@LaDo[N] ^_^
достаточно одного SF->getSAMP()->getPlayers()->isListed[std::stoi(id)] на сколько помню
Сяб, работает. А что вообще обозначает эта функция? А то вырезал ее из Гайда Клина
Как правильно получить свои коорды (для дальнейшего получения дистанции между двумя точками)?
C++:
Код:
CVector
*
mpos
=
PEDSELF
->
GetPosition
(
)
;
AddChat
(
-
1
,
"Param: %s "
,
mpos
[
0
]
)
;
|
|
|

17.10.2022, 20:39
|
|
Участник форума
Регистрация: 20.12.2021
Сообщений: 290
С нами:
2315345
Репутация:
48
|
|
Сообщение от egaa
Как правильно получить свои коорды (для дальнейшего получения дистанции между двумя точками)?
cc:
Код:
//Вариант 1
D3DXVECTOR3
player
(
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
)
;
//Использование
player
.
x
,
player
.
y
,
player
.
z
//Вариант 2
D3DXVECTOR3
player
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
id
)
->
position
[
0
]
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
id
)
->
position
[
1
]
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
id
)
->
position
[
2
]
)
;
//Где "id" указываеш свой ид
//Использование
player
.
x
,
player
.
y
,
player
.
z
но как по мне лучше юзать первый варик он нормально показывает, если юзать 2 то корды скакать будут при движении
Сообщение от Z3roKwq
cc:
Код:
//Вариант 1
D3DXVECTOR3
player
(
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
)
;
//Использование
player
.
x
,
player
.
y
,
player
.
z
//Вариант 2
D3DXVECTOR3
player
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
id
)
->
position
[
0
]
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
id
)
->
position
[
1
]
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
id
)
->
position
[
2
]
)
;
//Где "id" указываеш свой ид
//Использование
player
.
x
,
player
.
y
,
player
.
z
но как по мне лучше юзать первый варик он нормально показывает, если юзать 2 то корды скакать будут при движении
p.s. 2 вариант для sf api 5.5.0(1)
|
|
|

17.10.2022, 21:42
|
|
Флудер
Регистрация: 19.06.2022
Сообщений: 2,997
С нами:
2055431
Репутация:
3
|
|
Сообщение от Z3roKwq
cc:
Код:
//Вариант 1
D3DXVECTOR3
player
(
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
)
;
//Использование
player
.
x
,
player
.
y
,
player
.
z
//Вариант 2
D3DXVECTOR3
player
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
id
)
->
position
[
0
]
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
id
)
->
position
[
1
]
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
id
)
->
position
[
2
]
)
;
//Где "id" указываеш свой ид
//Использование
player
.
x
,
player
.
y
,
player
.
z
но как по мне лучше юзать первый варик он нормально показывает, если юзать 2 то корды скакать будут при движении
p.s. 2 вариант для sf api 5.5.0(1)
как на 5.5.1 можно получить свой айдишник?
upd: решил
Из-за чего ошибка?
C++:
Код:
pos
[
0
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
remotePlayerInfo
[
std
::
stoi
(
id
)
]
->
data
->
onFootPos
[
0
]
;
// X
pos
[
1
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
remotePlayerInfo
[
std
::
stoi
(
id
)
]
->
data
->
onFootPos
[
1
]
;
// Y
pos
[
2
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
remotePlayerInfo
[
std
::
stoi
(
id
)
]
->
data
->
onFootPos
[
2
]
;
// Z
D3DXVECTOR3
player
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
localPlayerInfo
.
id
)
->
position
[
0
]
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
localPlayerInfo
.
id
)
->
position
[
1
]
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetOnFootData
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
localPlayerInfo
.
id
)
->
position
[
2
]
)
;
float
dist
=
sqrt
(
(
pos
[
0
]
-
player
.
x
)
^
2
+
(
pos
[
1
]
-
player
.
y
)
^
2
+
(
pos
[
2
]
-
player
.
z
)
^
2
)
;
Пытаюсь найти дистанцию между моим персом и чужим, но появляется ошибка

|
|
|

17.10.2022, 21:22
|
|
Участник форума
Регистрация: 21.07.2020
Сообщений: 280
С нами:
3059886
Репутация:
68
|
|
Сообщение от egaa
Сяб, работает. А что вообще обозначает эта функция? А то вырезал ее из Гайда Клина
есть ли в табе такой айди( 1 - есть, 0 - нет)
|
|
|

18.10.2022, 11:44
|
|
Постоянный
Регистрация: 05.08.2018
Сообщений: 372
С нами:
4091290
Репутация:
213
|
|
Как происходит шифрование пакета RakClientInterface::RPС? Если отправлять РПЦ, то оно идёт куда-то в ракпир, где преобразуется в пакет (ID_RPC, rpcID(byte), битстрим самого РПЦ), потом идут какие-то махинации, как я понял, с AES шифрованием и ключом в 16 байт, после чего пакет идёт в SocketLayer::SendTo уже в зашифрованном виде, где шифруется дейтаграмма, не могу понять, откуда берётся этот ключ, которым шифруется пакет до SocketLayer::SendTo
|
|
|

18.10.2022, 13:27
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от AdCKuY_DpO4uLa
Как происходит шифрование пакета RakClientInterface::RPС? Если отправлять РПЦ, то оно идёт куда-то в ракпир, где преобразуется в пакет (ID_RPC, rpcID(byte), битстрим самого РПЦ), потом идут какие-то махинации, как я понял, с AES шифрованием и ключом в 16 байт, после чего пакет идёт в SocketLayer::SendTo уже в зашифрованном виде, где шифруется дейтаграмма, не могу понять, откуда берётся этот ключ, которым шифруется пакет до SocketLayer::SendTo
authkey же
|
|
|

18.10.2022, 13:39
|
|
Постоянный
Регистрация: 05.08.2018
Сообщений: 372
С нами:
4091290
Репутация:
213
|
|
Сообщение от kin4stat
authkey же
auth_key есть два типа, один идёт пакетом ID_AUTH_KEY, второй идёт в RPC_ClientJoin/RPC_NPCJoin, но когда ты этот РПЦ кидаешь, он переводится в пакет в ракпире, и как-то шифруется, если выводить байты этого РПЦ до отправки через RakClientInterface::RPC, то будет виден даже ник, который находится в битстриме RPC_ClientJoin, но если выводить те же самые байты в SocketLayer::SendTo до шифрования дейтограммы, то они уже будут зашифрованны чем-то, соответственно, ник уже не показывается во всём массиве байт, но и сам массив порядком увеличивается в размере, примерно на 40+- байт
|
|
|

18.10.2022, 18:45
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от AdCKuY_DpO4uLa
auth_key есть два типа, один идёт пакетом ID_AUTH_KEY, второй идёт в RPC_ClientJoin/RPC_NPCJoin, но когда ты этот РПЦ кидаешь, он переводится в пакет в ракпире, и как-то шифруется, если выводить байты этого РПЦ до отправки через RakClientInterface::RPC, то будет виден даже ник, который находится в битстриме RPC_ClientJoin, но если выводить те же самые байты в SocketLayer::SendTo до шифрования дейтограммы, то они уже будут зашифрованны чем-то, соответственно, ник уже не показывается во всём массиве байт, но и сам массив порядком увеличивается в размере, примерно на 40+- байт
Вообще, там либо AES шифрование ключом из пакета ID_AUTH_KEY, либо сжатие, только сегодня это рыл.
А к самому клиентджоину если мне память не изменяет еще дополнительные данные приписываются
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|