ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   Как эмулировать входящий пакет? (https://forum.antichat.xyz/showthread.php?t=1444722)

Ya Zaregalsya 11.08.2022 04:13

Почему этот код не работает? Пакеты не эмулируются, не коннектится к серверу.

C++:





Код:

bool
CALLBACK
incomingPacket
(
stRakNetHookParams
*
data
)
{
SF
->
getRakNet
(
)
->
emulateRecvPacket
(
data
->
packetId
,
data
->
bitStream
)
;
return
false
;
}



Аналогичная функция в Мунлоадере работает как часы и пользуется спросом, но если вбить эту же функу из СФ в поиск по форуму, то не найдётся ни одного её упоминания. Отсюда можно сделать вывод, что одна из самых важных функций во всей либе неработоспособна, либо работает неочевидным образом и никто так и не понял как её использовать. Вопрос к разработчику @FYP

😐

01EG 22.11.2023 20:19

Цитата:

Сообщение от Ya Zaregalsya

Почему этот код не работает? Пакеты не эмулируются, не коннектится к серверу.

C++:





Код:

bool
CALLBACK
incomingPacket
(
stRakNetHookParams
*
data
)
{
SF
->
getRakNet
(
)
->
emulateRecvPacket
(
data
->
packetId
,
data
->
bitStream
)
;
return
false
;
}



Аналогичная функция в Мунлоадере работает как часы и пользуется спросом, но если вбить эту же функу из СФ в поиск по форуму, то не найдётся ни одного её упоминания. Отсюда можно сделать вывод, что одна из самых важных функций во всей либе неработоспособна, либо работает неочевидным образом и никто так и не понял как её использовать. Вопрос к разработчику @FYP

😐

эммм

собственно соизволю ответить

1) так а с каким пакетом, то работаешь ? у тебя входящий пакет приходит попадает в блок кода в котором возвращает ничего(ложное) - отмену, типа ничо и не должно работать

2) у тебя всё пустые значения, что битстрим, что параметры к нему

3) if( params->packetId == PacketEnumeration::TytPacketNyjniy )

4) типа_пример вот как должно было идти примерно, я так понимаю тебе нужно для примера, чтоб когда соединение с сервером устанавливалось, то сразу разрывалось ?

C++:





Код:

bool
CALLBACK
incomingPacket
(
stRakNetHookParams
*
data
)
{
// PACKET_CONNECTION_COOKIE = 26
if
(
params
->
packetId
==
PacketEnumeration
::
26
)
{
{
SF
->
getRakNet
(
)
->
emulateRecvPacket
(
data
->
packetId
,
data
->
bitStream
)
;
return
false
;
}
}



мало писал на сф, по идеи идом можно вставить пакет,

п.с. не бейте тапками, что апнул старую тему, не сдержался, триггернулся на этом, https://www.blast.hk/threads/151147/page-2#post-1155924 , еще давно видел эту тему, странно, что осталась без внимания, такая критика СФ и такой мастер как @Dark_Knight не пояснил еще здесь...

Ya Zaregalsya 22.11.2023 23:27

Цитата:

Сообщение от 01EG.

эммм
собственно соизволю ответить

1) так а с каким пакетом, то работаешь ? у тебя входящий пакет приходит попадает в блок кода в котором возвращает ничего(ложное) - отмену, типа ничо и не должно работать
2) у тебя всё пустые значения, что битстрим, что параметры к нему
3) if( params->packetId == PacketEnumeration::TytPacketNyjniy )

4) типа_пример вот как должно было идти примерно, я так понимаю тебе нужно для примера, чтоб когда соединение с сервером устанавливалось, то сразу разрывалось ?

C++:





Код:

bool
CALLBACK
incomingPacket
(
stRakNetHookParams
*
data
)
{
// PACKET_CONNECTION_COOKIE = 26
if
(
params
->
packetId
==
PacketEnumeration
::
26
)
{
{
SF
->
getRakNet
(
)
->
emulateRecvPacket
(
data
->
packetId
,
data
->
bitStream
)
;
return
false
;
}
}



мало писал на сф, по идеи идом можно вставить пакет,

п.с. не бейте тапками, что апнул старую тему, не сдержался, триггернулся на этом, https://www.blast.hk/threads/151147/page-2#post-1155924 , еще давно видел эту тему, странно, что осталась без внимания, такая критика СФ и такой мастер как @Dark_Knight не пояснил еще здесь...

Спасибо чел что пытаешься помочь, но ты совсем нихера не понял что такое эмуляция. Если бы она работала в СФ, то код выше вообще никак не влиял бы на игровой процесс. Код выше чисто демонстрационный, пока ни у кого на этом форуме не получилось эмулировать пакет при помощи СФ. Если таковые есть, то пусть покажут свой пример. Я пытался сделать самыми разными способами и нифига не получилось.

01EG 23.11.2023 03:33

Цитата:

Сообщение от Ya Zaregalsya

Спасибо чел что пытаешься помочь, но ты совсем нихера не понял что такое эмуляция. Если бы она работала в СФ, то код выше вообще никак не влиял бы на игровой процесс. Код выше чисто демонстрационный, пока ни у кого на этом форуме не получилось эмулировать пакет при помощи СФ. Если таковые есть, то пусть покажут свой пример. Я пытался сделать самыми разными способами и нифига не получилось.

эмулировать пакет не равно заполнить структуру и отправить ? это единственный способ в сф

Ya Zaregalsya 23.11.2023 13:21

Цитата:

Сообщение от 01EG.

эмулировать пакет не равно заполнить структуру и отправить ? это единственный способ в сф

Это называется отправить пакет. А эмулировать это когда ты принудительно заставляешь самп обработать твой собственный пакет, как будто он пришёл от сервера.

Ya Zaregalsya 31.01.2024 12:17

Вроде что-то получилось.

C++:





Код:

struct
stOnFootData
{
uint16_t
sLeftRightKeys
;
uint16_t
sUpDownKeys
;
union
{
uint16_t
sKeys
;
struct
stSAMPKeys
stSampKeys
;
}
;
float
fPosition
[
3
]
;
float
fQuaternion
[
4
]
;
uint8_t
byteHealth
;
uint8_t
byteArmor
;
uint8_t
byteCurrentWeapon
;
uint8_t
byteSpecialAction
;
float
fMoveSpeed
[
3
]
;
float
fSurfingOffsets
[
3
]
;
uint16_t
sSurfingVehicleID
;
union
{
struct
{
uint16_t
id
;
uint8_t
frameDelta
;
union
{
struct
{
bool
loop
:
1
;
bool
lockX
:
1
;
bool
lockY
:
1
;
bool
freeze
:
1
;
uint8_t
time
:
2
;
uint8_t
_unused
:
1
;
bool
regular
:
1
;
}
;
uint8_t
value
;
}
flags
;
}
animation
;
struct
{
uint16_t
sCurrentAnimationID
;
uint16_t
sAnimFlags
;
}
;
}
;
}
;
void
emulOnFootData
(
int
sampPlayerId
,
stOnFootData onFootData
)
{
bool
bHasLeftRightKeys
=
onFootData
.
sLeftRightKeys
!=
0
?
true
:
false
;
bool
bHasUpDownKeys
=
onFootData
.
sUpDownKeys
!=
0
?
true
:
false
;
bool
bHasSurfInfo
=
onFootData
.
sSurfingVehicleID
!=
0
?
true
:
false
;
bool
bAnimation
=
onFootData
.
sCurrentAnimationID
!=
0
?
true
:
false
;
BitStream bs
;
bs
.
Write
(
(
unsigned
short
)
sampPlayerId
)
;
bs
.
Write
(
bHasLeftRightKeys
)
;
if
(
bHasLeftRightKeys
)
{
bs
.
Write
(
(
WORD
)
onFootData
.
sLeftRightKeys
)
;
}
bs
.
Write
(
bHasUpDownKeys
)
;
if
(
bHasUpDownKeys
)
{
bs
.
Write
(
(
WORD
)
onFootData
.
sUpDownKeys
)
;
}
bs
.
Write
(
onFootData
.
sKeys
)
;
// bs.WriteVector(onFootData.fPosition[0], onFootData.fPosition[1], onFootData.fPosition[2]);
bs
.
Write
(
onFootData
.
fPosition
[
0
]
)
;
bs
.
Write
(
onFootData
.
fPosition
[
1
]
)
;
bs
.
Write
(
onFootData
.
fPosition
[
2
]
)
;
bs
.
WriteNormQuat
(
onFootData
.
fQuaternion
[
0
]
,
onFootData
.
fQuaternion
[
1
]
,
onFootData
.
fQuaternion
[
2
]
,
onFootData
.
fQuaternion
[
3
]
)
;
BYTE byteHealthArmor
=
(
onFootData
.
byteHealth

getRakNet
(
)
->
emulateRecvPacket
(
207
,
&
bs
)
;
}
void
test
(
int
playerId
)
{
stOnFootData onFootData
;
onFootData
.
sLeftRightKeys
=
0
;
onFootData
.
sUpDownKeys
=
0
;
onFootData
.
sKeys
=
0
;
onFootData
.
fPosition
[
0
]
=
PEDSELF
->
GetPosition
(
)
->
fX
+
1.0
;
onFootData
.
fPosition
[
1
]
=
PEDSELF
->
GetPosition
(
)
->
fY
;
onFootData
.
fPosition
[
2
]
=
PEDSELF
->
GetPosition
(
)
->
fZ
;
onFootData
.
fQuaternion
[
0
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fQuaternion
[
0
]
;
onFootData
.
fQuaternion
[
1
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fQuaternion
[
1
]
;
onFootData
.
fQuaternion
[
2
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fQuaternion
[
2
]
;
onFootData
.
fQuaternion
[
3
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fQuaternion
[
3
]
;
onFootData
.
byteHealth
=
50
;
onFootData
.
byteArmor
=
100
;
onFootData
.
byteCurrentWeapon
=
24
;
onFootData
.
byteSpecialAction
=
68
;
onFootData
.
fMoveSpeed
[
0
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fMoveSpeed
[
0
]
;
onFootData
.
fMoveSpeed
[
1
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fMoveSpeed
[
1
]
;
onFootData
.
fMoveSpeed
[
2
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fMoveSpeed
[
2
]
;
bool
bHasSurfInfo
=
false
;
onFootData
.
fSurfingOffsets
[
0
]
=
0.0
;
onFootData
.
fSurfingOffsets
[
1
]
=
0.0
;
onFootData
.
fSurfingOffsets
[
2
]
=
0.0
;
onFootData
.
sSurfingVehicleID
=
0
;
bool
bAnimation
=
true
;
/*
    onFootData.animation.id = 1224;
    onFootData.animation.frameDelta = 1.0;
    onFootData.animation.flags.lockX = false;
    onFootData.animation.flags.lockY = false;
    onFootData.animation.flags.freeze = false;
    onFootData.animation.flags.time = false;
    onFootData.animation.flags._unused = false;
    onFootData.animation.flags.regular = false;*/
onFootData
.
sCurrentAnimationID
=
984
;
onFootData
.
sAnimFlags
=
4356
;
emulOnFootData
(
playerId
,
onFootData
)
;
}



Недостающие функции битстрима можно скопипастить отсюда.

UPD: исправил фатальные опечатки.

Ya Zaregalsya 03.06.2024 17:41

Цитата:

Сообщение от Ya Zaregalsya

Почему этот код не работает? Пакеты не эмулируются, не коннектится к серверу.

C++:





Код:

bool
CALLBACK
incomingPacket
(
stRakNetHookParams
*
data
)
{
SF
->
getRakNet
(
)
->
emulateRecvPacket
(
data
->
packetId
,
data
->
bitStream
)
;
return
false
;
}



Аналогичная функция в Мунлоадере работает как часы и пользуется спросом, но если вбить эту же функу из СФ в поиск по форуму, то не найдётся ни одного её упоминания. Отсюда можно сделать вывод, что одна из самых важных функций во всей либе неработоспособна, либо работает неочевидным образом и никто так и не понял как её использовать. Вопрос к разработчику @FYP

😐

А этот код не работал из-за того, что в СФ ид пакета идёт в куче данных с самим пакетом, но при эмуляции ожидает получить сам пакет без этого ид. С РПС таких проблем нет.


Время: 15:26