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

  #1  
Старый 02.08.2022, 14:47
Unknown_251
Новичок
Регистрация: 09.04.2022
Сообщений: 19
С нами: 2156817

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

Суть такова:

С помощью SF плагина выводится диалог игроку. И естественно ставится функция обработчик этого диалога.

Вопрос в следующем. Как отправить введенные данные игроком на сервер, чтобы сработал паблик OnDialogResponce.

Пробовал с помощью RPD_DialogResponse. Данные в BitStream записывал в следующем порядке:

- dialogId (2 байта)

- button (1 байт)

- listItem (2 байта)

- textLen (1 байт)

- text (textLen байт)

Если вдруг понадобятся:

- версия SAMP 0.3.7 R3-1

- версия sampfuncs 5.5.1
 
Ответить с цитированием

  #2  
Старый 02.08.2022, 15:36
sc6ut
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами: 3174020

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

C++:





Код:
void
send_dialog_responce
(
std
::
uint16_t
id
,
std
::
uint8_t
responce
,
std
::
uint16_t
list_item
,
const
char
*
text
)
{
BitStream bs
;
bs
.
Write
(
id
)
;
bs
.
Write
(
responce
)
;
bs
.
Write
(
list_item
)
;
bs
.
Write
(
static_cast

(
std
::
strlen
(
text
)
)
)
;
bs
.
Write
(
text
,
std
::
strlen
(
text
)
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPC_DialogResponse
,
&
bs
)
;
}
 
Ответить с цитированием

  #3  
Старый 02.08.2022, 21:25
Unknown_251
Новичок
Регистрация: 09.04.2022
Сообщений: 19
С нами: 2156817

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

Объясни это:

bs.Write(static_cast(std::strlen(text)));

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

Почему два раза была записана длина текста в BitStream. Или во втором случае нужно указать сколько именно символов текста нужно записать?

В остальном спасибо.

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

C++:





Код:
void
send_dialog_responce
(
std
::
uint16_t
id
,
std
::
uint8_t
responce
,
std
::
uint16_t
list_item
,
const
char
*
text
)
{
BitStream bs
;
bs
.
Write
(
id
)
;
bs
.
Write
(
responce
)
;
bs
.
Write
(
list_item
)
;
bs
.
Write
(
static_cast

(
std
::
strlen
(
text
)
)
)
;
bs
.
Write
(
text
,
std
::
strlen
(
text
)
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPC_DialogResponse
,
&
bs
)
;
}

Что то не хочет сервер (OnDialogResponse) обрабатывать такой запрос. Что опять не так?
 
Ответить с цитированием

  #4  
Старый 05.08.2022, 10:40
Yuriy Code
Постоянный
Регистрация: 01.05.2021
Сообщений: 752
С нами: 2650753

Репутация: 98


По умолчанию

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

C++:





Код:
void
send_dialog_responce
(
std
::
uint16_t
id
,
std
::
uint8_t
responce
,
std
::
uint16_t
list_item
,
const
char
*
text
)
{
BitStream bs
;
bs
.
Write
(
id
)
;
bs
.
Write
(
responce
)
;
bs
.
Write
(
list_item
)
;
bs
.
Write
(
static_cast

(
std
::
strlen
(
text
)
)
)
;
bs
.
Write
(
text
,
std
::
strlen
(
text
)
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPC_DialogResponse
,
&
bs
)
;
}

Не проще ли сделать следующим образом?

C++:





Код:
SF
->
getSAMP
(
)
->
sendDialogResponse
(
ид
,
кнопка
,
листитем
,
текст
)
;
 
Ответить с цитированием

  #5  
Старый 14.08.2022, 14:01
Unknown_251
Новичок
Регистрация: 09.04.2022
Сообщений: 19
С нами: 2156817

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

Цитата:
Сообщение от Yuriy Code  

Не проще ли сделать следующим образом?

C++:





Код:
SF
->
getSAMP
(
)
->
sendDialogResponse
(
ид
,
кнопка
,
листитем
,
текст
)
;

А чет так можно было что ли?

UPD: спс, я просто тупо не посмотрел весь список функций модуля SAMP.
 
Ответить с цитированием

  #6  
Старый 25.08.2022, 17:07
kin4stat
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами: 4483143

Репутация: 183


По умолчанию

Вообще, сам самп имеет параметр BOOL server_side при создании диалога. Отвечает за то, будет ли отправлен ответ серверу при действии игрока. Сф такой параметр не имеет чтоль?
 
Ответить с цитированием

  #7  
Старый 27.08.2022, 01:03
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

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

Вообще, сам самп имеет параметр BOOL server_side при создании диалога. Отвечает за то, будет ли отправлен ответ серверу при действии игрока. Сф такой параметр не имеет чтоль?
Вроде клиент сайт никогда такого не имел.
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.