PDA

Просмотр полной версии : Синхронизация оружия на руках ID_WEAPONS_UPDATE - ID: 204


Ya Zaregalsya
12.11.2021, 13:00
Чё за бред?

C++:






struct
WeaponsUpdateData
{
UINT8 slot_0
;
UINT8 weapon_0
;
UINT16 ammo_0
;
UINT8 slot_1
;
UINT8 weapon_1
;
UINT16 ammo_1
;
UINT8 slot_2
;
UINT8 weapon_2
;
UINT16 ammo_2
;
UINT8 slot_3
;
UINT8 weapon_3
;
UINT16 ammo_3
;
UINT8 slot_4
;
UINT8 weapon_4
;
UINT16 ammo_4
;
UINT8 slot_5
;
UINT8 weapon_5
;
UINT16 ammo_5
;
UINT8 slot_6
;
UINT8 weapon_6
;
UINT16 ammo_6
;
UINT8 slot_7
;
UINT8 weapon_7
;
UINT16 ammo_7
;
UINT8 slot_8
;
UINT8 weapon_8
;
UINT16 ammo_8
;
UINT8 slot_9
;
UINT8 weapon_9
;
UINT16 ammo_9
;
UINT8 slot_10
;
UINT8 weapon_10
;
UINT16 ammo_10
;
UINT8 slot_11
;
UINT8 weapon_11
;
UINT16 ammo_11
;
}
;
bool
CALLBACK
outcomingPacket
(
stRakNetHookParams
*
data
)
{
switch
(
data
->
packetId
)
{
case
204
:
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"WeaponsUpdateData"
)
;
WeaponsUpdateData weaponsUpdateData
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
slot_0
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
weapon_0
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
ammo_0
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
slot_1
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
weapon_1
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
ammo_1
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
slot_2
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
weapon_2
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
ammo_2
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
slot_3
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
weapon_3
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
ammo_3
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
slot_4
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
weapon_4
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
ammo_4
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
slot_5
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
weapon_5
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
ammo_5
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
slot_6
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
weapon_6
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
ammo_6
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
slot_7
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
weapon_7
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
ammo_7
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
slot_8
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
weapon_8
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
ammo_8
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
slot_9
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
weapon_9
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
ammo_9
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
slot_10
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
weapon_10
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
ammo_10
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
slot_11
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
weapon_11
)
;
data
->
bitStream
->
Read
(
weaponsUpdateData
.
ammo_11
)
;
data
->
bitStream
->
ResetReadPointer
(
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"slot_0: %i; weapon_0: %i; ammo_0: %i;"
,
weaponsUpdateData
.
slot_0
,
weaponsUpdateData
.
weapon_0
,
weaponsUpdateData
.
ammo_0
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"slot_1: %i; weapon_1: %i; ammo_1: %i;"
,
weaponsUpdateData
.
slot_1
,
weaponsUpdateData
.
weapon_1
,
weaponsUpdateData
.
ammo_1
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"slot_2: %i; weapon_2: %i; ammo_2: %i;"
,
weaponsUpdateData
.
slot_2
,
weaponsUpdateData
.
weapon_2
,
weaponsUpdateData
.
ammo_2
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"slot_3: %i; weapon_3: %i; ammo_3: %i;"
,
weaponsUpdateData
.
slot_3
,
weaponsUpdateData
.
weapon_3
,
weaponsUpdateData
.
ammo_3
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"slot_4: %i; weapon_4: %i; ammo_4: %i;"
,
weaponsUpdateData
.
slot_4
,
weaponsUpdateData
.
weapon_4
,
weaponsUpdateData
.
ammo_4
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"slot_5: %i; weapon_5: %i; ammo_5: %i;"
,
weaponsUpdateData
.
slot_5
,
weaponsUpdateData
.
weapon_5
,
weaponsUpdateData
.
ammo_5
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"slot_6: %i; weapon_6: %i; ammo_6: %i;"
,
weaponsUpdateData
.
slot_6
,
weaponsUpdateData
.
weapon_6
,
weaponsUpdateData
.
ammo_6
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"slot_7: %i; weapon_7: %i; ammo_7: %i;"
,
weaponsUpdateData
.
slot_7
,
weaponsUpdateData
.
weapon_7
,
weaponsUpdateData
.
ammo_7
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"slot_8: %i; weapon_8: %i; ammo_8: %i;"
,
weaponsUpdateData
.
slot_8
,
weaponsUpdateData
.
weapon_8
,
weaponsUpdateData
.
ammo_8
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"slot_9: %i; weapon_9: %i; ammo_9: %i;"
,
weaponsUpdateData
.
slot_9
,
weaponsUpdateData
.
weapon_9
,
weaponsUpdateData
.
ammo_9
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"slot_10: %i; weapon_10: %i; ammo_10: %i;"
,
weaponsUpdateData
.
slot_10
,
weaponsUpdateData
.
weapon_10
,
weaponsUpdateData
.
ammo_10
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"slot_11: %i; weapon_11: %i; ammo_11: %i;"
,
weaponsUpdateData
.
slot_11
,
weaponsUpdateData
.
weapon_11
,
weaponsUpdateData
.
ammo_11
)
;
break
;
}




https://forum.antichat.xyz/attachments/27885914/

Rei
12.11.2021, 13:26
Структуру пакета чекай

Ya Zaregalsya
12.11.2021, 13:45
Структуру пакета чекай


И что с ней не так? Взята отсюда: https://github.com/Brunoo16/samp-packet-list/wiki/Packet-List#id_weapons_update---id-204

Rei
12.11.2021, 14:00
И что с ней не так? Взята отсюда: https://github.com/Brunoo16/samp-packet-list/wiki/Packet-List#id_weapons_update---id-204


там паленая какая-то

короче, скипай 32 бита

Ya Zaregalsya
12.11.2021, 14:09
там паленая какая-то

короче, скипай 32 бита


Так скиньте правильную. Скипать в каком месте? Поставил пропуск битов в самое начало и ничего особо не изменилось.



там паленая какая-то

короче, скипай 32 бита


Нашёл другую структуру в собейте, чуть позже попробую.

Rei
12.11.2021, 14:21
Так скиньте правильную. Скипать в каком месте? Поставил пропуск битов в самое начало и ничего особо не изменилось.

Нашёл другую структуру в собейте, чуть позже попробую.


2 байта - таргет ид игрока

2 байта - таргет ид актера

дальше читаешь пушки как обычно

Ya Zaregalsya
12.11.2021, 22:30
2 байта - таргет ид игрока
2 байта - таргет ид актера
дальше читаешь пушки как обычно


Всё равно выводит мусор. Единственная полезная информация это что на месте ammo_0 выводятся патроны (вернее патроны умноженные в 256 раз), но это происходит только если синхра отправляется в момент выстрела.

И ещё первый байт это реально TargetID, но и там в 256 раз больше и только в определённый момент если другой игрок подсвечивается маркером, а так без этого там мусорная инфа 256 в квадрате.

Rei
12.11.2021, 23:02
Всё равно выводит мусор. Единственная полезная информация это что на месте ammo_0 выводятся патроны (вернее патроны умноженные в 256 раз), но это происходит только если синхра отправляется в момент выстрела.

И ещё первый байт это реально TargetID, но и там в 256 раз больше и только в определённый момент если другой игрок подсвечивается маркером, а так без этого там мусорная инфа 256 в квадрате.


65535 значит пусто ( нет таргета )

Ya Zaregalsya
13.11.2021, 02:58
65535 значит пусто ( нет таргета )


Есть где-нибудь нормальная готовая структура? Уже долго вожусь с подстановкой разных типов данных, все они если и дают правильный результат, то выводят его в неожиданном месте в перемешку с кучей мусора.

По этому пакету настолько противоречивая информация, что даже ID все пишут разный.

Rei
13.11.2021, 03:58
Есть где-нибудь нормальная готовая структура? Уже долго вожусь с подстановкой разных типов данных, все они если и дают правильный результат, то выводят его в неожиданном месте в перемешку с кучей мусора.

По этому пакету настолько противоречивая информация, что даже ID все пишут разный.


samp.lua в handlers

Ya Zaregalsya
13.11.2021, 06:42
samp.lua в handlers


Добавил UINT16 playerTarget; UINT16 actorTarget; но мусор как выводился, так и выводится.

Кстати пакет приходит всегда размером 72 бита вне зависимости от кол-ва оружия на руках. Тут опять-таки везде разная информация, кто-то говорит, что должны слаться только данные об обновлённом оружии, другие говорят, что шлются сразу все 11 слотов, плюс этот пакет зачем-то объединён с синхронизацией маркера над головой, такие разные задачи, а пакет на них один. Такая вот загадочная каша.

SAsha133777
13.11.2021, 07:46
Добавил UINT16 playerTarget; UINT16 actorTarget; но мусор как выводился, так и выводится.

Кстати пакет приходит всегда размером 72 бита вне зависимости от кол-ва оружия на руках. Тут опять-таки везде разная информация, кто-то говорит, что должны слаться только данные об обновлённом оружии, другие говорят, что шлются сразу все 11 слотов, плюс этот пакет зачем-то объединён с синхронизацией маркера над головой, такие разные задачи, а пакет на них один. Такая вот загадочная каша.


Этот пакет отправляется когда меняется количество патрон у какого-то оружия, когда оно появляется, когда удаляется. И в одном пакете только для одного оружия. Ещё он отправляется когда целишься на игрока и видно у него над головой зелёный треугольник.

Ya Zaregalsya
14.11.2021, 04:09
Спасибо всем за ответы. В интернете так и не нашёл правильного варианта, в итоге методом тыка пришёл к такой структуре:

Lua:






struct
WeaponsUpdateData
{
UINT8 packet_id
;
UINT8 player_target_id
;
UINT8 unknown_player_data
;
UINT8 npc_target_id
;
UINT8 unknown_npc_data
;
UINT8 slot_id
;
UINT8 weapon_id
;
UINT16 ammo_amount
;
//
packet_id
-
204.
//
player_target_id
-
ID захватываемого игрока
.
//
unknown_player_data
-
непонятная инфа о захватываемых игроках
,
но не мусор
.
Встречал
0
,
1
и
2.
//
npc_target_id
-
ID захватываемого NPC
.
//
unknown_npc_data
-
непонятная инфа о захватываемых NPC
,
но не мусор
.
Встречал только
0.
Скорее всего это bool
.
//
slot_id
-
ID обновлённого слота
.
//
weapon_id
-
ID обновлённого оружия
.
//
ammo_amount
-
обновлённое кол
-
во боеприпасов
.
}
;

al3x_
12.12.2021, 23:49
если все еще нужно

C++:






unsigned
char
packet
;
unsigned
short
playerTarget
,
actorTarget
;
unsigned
char
slot
,
weapon
;
unsigned
short
ammo
;
params
->
bitStream
->
Read
(
packet
)
;
params
->
bitStream
->
Read
(
playerTarget
)
;
params
->
bitStream
->
Read
(
actorTarget
)
;
params
->
bitStream
->
Read
(
slot
)
;
params
->
bitStream
->
Read
(
weapon
)
;
params
->
bitStream
->
Read
(
ammo
)
;