RPD_DialogResponse

Unknown_251

Новичок
Автор темы
19
1
Суть такова:

С помощью 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::uint8_t>(std::strlen(text)));
    bs.Write(text, std::strlen(text));
    SF->getRakNet()->SendRPC(RPC_DialogResponse, &bs);
}
Не проще ли сделать следующим образом?

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

sc6ut

неизвестный
Модератор
382
1,074
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::uint8_t>(std::strlen(text)));
    bs.Write(text, std::strlen(text));
    SF->getRakNet()->SendRPC(RPC_DialogResponse, &bs);
}
 

Unknown_251

Новичок
Автор темы
19
1
Объясни это:

bs.Write(static_cast<std::uint8_t>(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::uint8_t>(std::strlen(text)));
    bs.Write(text, std::strlen(text));
    SF->getRakNet()->SendRPC(RPC_DialogResponse, &bs);
}
Что то не хочет сервер (OnDialogResponse) обрабатывать такой запрос. Что опять не так?
 
Последнее редактирование:

Yuriy Code

Известный
755
926
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::uint8_t>(std::strlen(text)));
    bs.Write(text, std::strlen(text));
    SF->getRakNet()->SendRPC(RPC_DialogResponse, &bs);
}
Не проще ли сделать следующим образом?

C++:
SF->getSAMP()->sendDialogResponse(ид, кнопка, листитем, текст);
 
  • Нравится
Реакции: Unknown_251

Unknown_251

Новичок
Автор темы
19
1
Не проще ли сделать следующим образом?

C++:
SF->getSAMP()->sendDialogResponse(ид, кнопка, листитем, текст);
А чет так можно было что ли?

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

Dark_Knight

Me, me and me.
Друг
4,056
2,075
Вообще, сам самп имеет параметр BOOL server_side при создании диалога. Отвечает за то, будет ли отправлен ответ серверу при действии игрока. Сф такой параметр не имеет чтоль?
Вроде клиент сайт никогда такого не имел.