Просмотр полной версии : RPD_DialogResponse
Unknown_251
02.08.2022, 14:47
Суть такова:
С помощью 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
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
)
;
}
Unknown_251
02.08.2022, 21:25
Объясни это:
bs.Write(static_cast(std::strlen(text)));
bs.Write(text, std::strlen(text));
Почему два раза была записана длина текста в BitStream. Или во втором случае нужно указать сколько именно символов текста нужно записать?
В остальном спасибо.
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) обрабатывать такой запрос. Что опять не так?
Yuriy Code
05.08.2022, 10:40
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
(
ид
,
кнопка
,
листитем
,
текст
)
;
Unknown_251
14.08.2022, 14:01
Не проще ли сделать следующим образом?
C++:
SF
->
getSAMP
(
)
->
sendDialogResponse
(
ид
,
кнопка
,
листитем
,
текст
)
;
А чет так можно было что ли?
UPD: спс, я просто тупо не посмотрел весь список функций модуля SAMP.
kin4stat
25.08.2022, 17:07
Вообще, сам самп имеет параметр BOOL server_side при создании диалога. Отвечает за то, будет ли отправлен ответ серверу при действии игрока. Сф такой параметр не имеет чтоль?
Dark_Knight
27.08.2022, 01:03
Вообще, сам самп имеет параметр BOOL server_side при создании диалога. Отвечает за то, будет ли отправлен ответ серверу при действии игрока. Сф такой параметр не имеет чтоль?
Вроде клиент сайт никогда такого не имел.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot