PDA

Просмотр полной версии : SF | Не отправляется дамаг через BitStream


ANZR
01.08.2021, 18:28
Ку, пытаюсь нанести урон игроку, но в итоге урона никакого и нет.

Вроде бы все правильно

c++:






int
pid
=
std
::
stoi
(
id
)
;
BitStream givePizda
;
givePizda
.
ResetWritePointer
(
)
;
givePizda
.
Write
(
false
)
;
givePizda
.
Write
(
(
UINT16
)
pid
)
;
givePizda
.
Write
(
(
float
)
1.32
)
;
givePizda
.
Write
(
(
UINT32
)
0
)
;
givePizda
.
Write
(
(
UINT32
)
3
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPC_GiveTakeDamage
,
&
givePizda
)
;

Sargon
01.08.2021, 18:40
givePizda.Write(true);


false

ANZR
01.08.2021, 18:47
false


Изменил сразу же, как залил. Ничего не изменилось

Sargon
01.08.2021, 18:56
Изменил сразу же, как залил. Ничего не изменилось


больше ошибок не наблюдаю, отправка должна работать.

ANZR
01.08.2021, 19:09
больше ошибок не наблюдаю, отправка должна работать.


Ну вот и я о том же

Ошибок нет, а отправка не идет

kin4stat
01.08.2021, 19:24
В этой рпц bool должен быть записан 1 битом, а не байтом, поэтому givePizda.WriteBit(false);

UPD: Packet list от bruno16 говно с дезинфой. Смотрите на вики бластхака(не все рпц там есть) либо в sampevents

kin4stat
01.08.2021, 19:27
givePizda.Write((UINT16)pid);


А еще вместо такого говна лучше

givePizda.Write(pid);

А еще вместо C Style каста (UINT32) стоит использовать C++ style касты

static_cast() Или reinterpret_cast()

UPD: а вообще стоит переписать весь код

C++:






int
pid
=
std
::
stoi
(
id
)
;
BitStream givePizda
;
givePizda
.
WriteBit
(
false
)
;
givePizda
.
Write

(
pid
)
;
// или unsigned short
givePizda
.
Write
(
1.32f
)
;
givePizda
.
Write
(
0ul
)
;
givePizda
.
Write
(
3ul
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPC_GiveTakeDamage
,
&
givePizda
)
;




P.S. Я в курсе что 0ul может занимать больше 32 бит, но мы находимся в реалиях x86 и msvc где 0ul это unsigned long == 32bits

ANZR
01.08.2021, 20:09
В этой рпц bool должен быть записан 1 битом, а не байтом, поэтому givePizda.WriteBit(false);
UPD: Packet list от bruno16 говно с дезинфой. Смотрите на вики бластхака(не все рпц там есть) либо в sampevents


Все бы ничего, но функции WriteBit нету в классе BitStream



А еще вместо такого говна лучше
givePizda.Write(pid);
А еще вместо C Style каста (UINT32) стоит использовать C++ style касты
static_cast() Или reinterpret_cast()

UPD: а вообще стоит переписать весь код

C++:






int
pid
=
std
::
stoi
(
id
)
;
BitStream givePizda
;
givePizda
.
WriteBit
(
false
)
;
givePizda
.
Write

(
pid
)
;
// или unsigned short
givePizda
.
Write
(
1.32f
)
;
givePizda
.
Write
(
0ul
)
;
givePizda
.
Write
(
3ul
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPC_GiveTakeDamage
,
&
givePizda
)
;




P.S. Я в курсе что 0ul может занимать больше 32 бит, но мы находимся в реалиях x86 и msvc где 0ul это unsigned long == 32bits


По этой инфе - сниму шляпу, т.к ты открыл для меня style касты. Я до этого не ебал что это и как называется

kin4stat
01.08.2021, 21:20
Все бы ничего, но функции WriteBit нету в классе BitStream

По идее Write0 или Write1 выполнит эту функцию(0 - false, 1 - true)