ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   SF | Проблема с отправкой RPC (https://forum.antichat.xyz/showthread.php?t=1383757)

ANZR 05.04.2021 00:57

Хаюшки, тут возникла необходимость работы с bitstream

Вот например, хочу я отправить в чат сообщение(не от моего лица, а в виде серверного), не через функцию отправки сообщения, а напрямую через RPC

Вроде сделал так, как надо, но текста в чате нету

с++:





Код:

char
text
[
]
=
"hello"
;
BitStream bsActorSync
;
bsActorSync
.
Write
(
(
UINT32
)
0xFFFFFF
)
;
bsActorSync
.
Write
(
(
UINT32
)
sizeof
(
text
)
)
;
bsActorSync
.
Write
(
text
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPC_ScrClientMessage
,
&
bsActorSync
)
;



можете сказать, в чем проблема

Romelo 05.04.2021 01:05

его эмулировать нужно, а не отправлять

Другое - SAMPFUNCS | API C++

Попробуй другой шрифт.

www.blast.hk

sc6ut 05.04.2021 01:06

1. Есть в SF встроенная функция, так что все это не надо
Код:

SF->getSAMP()->getChat()->AddChatMessage( -1, "text" );
Но всё же.

2. В отличие от битстрима пакета, в начале битстрима rpc нет айди rpc, поэтому его записывать не надо.

3.
Код:

sizeof
возвращает размер переменной, а не длинну текст, в твоём случае это будет 4 байта, то есть размер любого указателя. Вместо него тебе надо записать длинну текста, к примеру, с помощью
Код:

strlen( text )
4. Тебе надо эмулировать rpc, а не отправлять его
Код:

SF->getRakNet()->emulateRecvRPC
.

sᴀxᴏɴ 05.04.2021 01:10

Цитата:

Сообщение от SC6UT

1. Есть в SF встроенная функция, так что все это не надо
Код:

SF->getSAMP()->getChat()->AddChatMessage( -1, "text" );
Но всё же.
2. В отличие от битстрима пакета, в начале битстрима rpc нет айди rpc, поэтому его записывать не надо.
3.
Код:

sizeof
возвращает размер переменной, а не длинну текст, в твоём случае это будет 4 байта, то есть размер любого указателя. Вместо него тебе надо записать длинну текста, к примеру, с помощью
Код:

strlen( text )
4. Тебе надо эмулировать rpc, а не отправлять его
Код:

SF->getRakNet()->emulateRecvRPC
.

В данном случае size - это массив char, поэтому sizeof вернет его размер = 6

sc6ut 05.04.2021 01:11

Цитата:

Сообщение от alexandersaxon

В данном случае size - это массив char, поэтому sizeof вернет его размер = 6

да, но это только в этом случае.

ANZR 05.04.2021 01:15

Цитата:

Сообщение от SC6UT

да, но это только в этом случае.

Какой случай может быть, который под это не подходит?

sᴀxᴏɴ 05.04.2021 01:15

Цитата:

Сообщение от ANZR

Какой случай может быть, который под это не подходит?

Код:

const char* bar = "hello"
sizeof(bar) вернет 4, либо 8

ANZR 05.04.2021 01:16

Цитата:

Сообщение от SC6UT

1. Есть в SF встроенная функция, так что все это не надо
Код:

SF->getSAMP()->getChat()->AddChatMessage( -1, "text" );
Но всё же.
2. В отличие от битстрима пакета, в начале битстрима rpc нет айди rpc, поэтому его записывать не надо.
3.
Код:

sizeof
возвращает размер переменной, а не длинну текст, в твоём случае это будет 4 байта, то есть размер любого указателя. Вместо него тебе надо записать длинну текста, к примеру, с помощью
Код:

strlen( text )
4. Тебе надо эмулировать rpc, а не отправлять его
Код:

SF->getRakNet()->emulateRecvRPC
.

Благодарю за объяснение всех моих ошибок

Кстати, по поводу AddChatMessage я знаю и сказал еще вначале, что мне нужно это сделать через bitStream, т.к у меня есть очень интересная идея, а это лишь один шаг для ее реализации, т.к я работать буду не только с текстом

sc6ut 05.04.2021 01:20

Цитата:

Сообщение от ANZR

Благодарю за объяснение всех моих ошибок
Кстати, по поводу AddChatMessage я знаю и сказал еще вначале, что мне нужно это сделать через bitStream, т.к у меня есть очень интересная идея, а это лишь один шаг для ее реализации, т.к я работать буду не только с текстом

забыл еще сказать: текст надо записывать в битстрим вместе с его размером, так:

Код:

bs.Write( text, strlen( text ) );

ANZR 05.04.2021 01:25

Цитата:

Сообщение от SC6UT

забыл еще сказать: текст надо записывать в битстрим вместе с его размером, так:

Код:

bs.Write( text, strlen( text ) );

Это я заметил по примеру, что мне скинули. С чем это вообще связано, можно спросить. Почему просто не текст отправить ведь размер я передал еще в прошлом действии


Время: 13:31