HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 05.04.2021, 00:57
ANZR
Участник форума
Регистрация: 03.08.2019
Сообщений: 168
С нами: 3568604

Репутация: 48
По умолчанию

Хаюшки, тут возникла необходимость работы с 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
)
;


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

  #2  
Старый 05.04.2021, 01:05
Romelo
Постоянный
Регистрация: 21.11.2014
Сообщений: 540
С нами: 6039222

Репутация: 163


По умолчанию

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

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

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

www.blast.hk
 
Ответить с цитированием

  #3  
Старый 05.04.2021, 01:06
sc6ut
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами: 3174020

Репутация: 213
По умолчанию

1. Есть в SF встроенная функция, так что все это не надо
Код:
SF->getSAMP()->getChat()->AddChatMessage( -1, "text" );
Но всё же.

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

3.
Код:
sizeof
возвращает размер переменной, а не длинну текст, в твоём случае это будет 4 байта, то есть размер любого указателя. Вместо него тебе надо записать длинну текста, к примеру, с помощью
Код:
strlen( text )
4. Тебе надо эмулировать rpc, а не отправлять его
Код:
SF->getRakNet()->emulateRecvRPC
.
 
Ответить с цитированием

  #4  
Старый 05.04.2021, 01:10
sᴀxᴏɴ
Постоянный
Регистрация: 08.06.2019
Сообщений: 787
С нами: 3649171

Репутация: 163


По умолчанию

Цитата:
Сообщение от 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
 
Ответить с цитированием

  #5  
Старый 05.04.2021, 01:11
sc6ut
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами: 3174020

Репутация: 213
По умолчанию

Цитата:
Сообщение от alexandersaxon  

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

  #6  
Старый 05.04.2021, 01:15
ANZR
Участник форума
Регистрация: 03.08.2019
Сообщений: 168
С нами: 3568604

Репутация: 48
По умолчанию

Цитата:
Сообщение от SC6UT  

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

  #7  
Старый 05.04.2021, 01:15
sᴀxᴏɴ
Постоянный
Регистрация: 08.06.2019
Сообщений: 787
С нами: 3649171

Репутация: 163


По умолчанию

Цитата:
Сообщение от ANZR  

Какой случай может быть, который под это не подходит?
Код:
const char* bar = "hello"
sizeof(bar) вернет 4, либо 8
 
Ответить с цитированием

  #8  
Старый 05.04.2021, 01:16
ANZR
Участник форума
Регистрация: 03.08.2019
Сообщений: 168
С нами: 3568604

Репутация: 48
По умолчанию

Цитата:
Сообщение от SC6UT  

1. Есть в SF встроенная функция, так что все это не надо
Код:
SF->getSAMP()->getChat()->AddChatMessage( -1, "text" );
Но всё же.
2. В отличие от битстрима пакета, в начале битстрима rpc нет айди rpc, поэтому его записывать не надо.
3.
Код:
sizeof
возвращает размер переменной, а не длинну текст, в твоём случае это будет 4 байта, то есть размер любого указателя. Вместо него тебе надо записать длинну текста, к примеру, с помощью
Код:
strlen( text )
4. Тебе надо эмулировать rpc, а не отправлять его
Код:
SF->getRakNet()->emulateRecvRPC
.
Благодарю за объяснение всех моих ошибок

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

  #9  
Старый 05.04.2021, 01:20
sc6ut
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами: 3174020

Репутация: 213
По умолчанию

Цитата:
Сообщение от ANZR  

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

Код:
bs.Write( text, strlen( text ) );
 
Ответить с цитированием

  #10  
Старый 05.04.2021, 01:25
ANZR
Участник форума
Регистрация: 03.08.2019
Сообщений: 168
С нами: 3568604

Репутация: 48
По умолчанию

Цитата:
Сообщение от SC6UT  

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

Код:
bs.Write( text, strlen( text ) );
Это я заметил по примеру, что мне скинули. С чем это вообще связано, можно спросить. Почему просто не текст отправить ведь размер я передал еще в прошлом действии
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.