Показать сообщение отдельно

  #10  
Старый 09.03.2021, 00:04
sc6ut
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами: 3174020

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

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

Как выбрать определенный пункт диалога (DIALOG_STYLE_LIST), нажать первую кнопку, ввести значение в поле диалога (DIALOG_STYLE_INPUT) и опять нажать первую кнопку? (SAMPFUNCS)
для начала узнаешь айди обоих диалогов

предположим ты узнал и айди первого равен 2011, а айди второго - 2012

C++:





Код:
// затем, вставляешь код функцию которая отправляет ответ диалогу
void
send_dialog_responce
(
unsigned
short
id
,
unsigned
char
responce
,
unsigned
short
list_item
,
const
char
*
text
)
{
BitStream bs
;
bs
.
ResetWritePointer
(
)
;
bs
.
Write
(
id
)
;
bs
.
Write
(
responce
)
;
bs
.
Write
(
list_item
)
;
bs
.
Write
(
static_cast

(
strlen
(
text
)
)
)
;
bs
.
Write
(
text
,
strlen
(
text
)
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPC_DialogResponse
,
&
bs
)
;
}
// создаешь переменную отвечающую за этап работы плагина, у нее будет значение 1 или 2
static
uint8_t
stage
=
1
;
// регистрируешь колбэк на приходящии RPC в mainloop
SF
->
getRakNet
(
)
->
registerRakNetCallback
(
RAKHOOK_TYPE_INCOMING_RPC
,
incomingRPC
)
;
bool
__stdcall
incomingRPC
(
stRakNetHookParams
*
params
)
{
// проверяем айди RPC
if
(
params
->
packetId
==
RPC_ScrShowDialog
)
{
// читаем данные диалога, нам нужен только айди
uint16_t
dialogID
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
dialogID
)
;
// проверяем айди диалога и этап
if
(
dialogID
==
/* айди первого диалога */
2011
&&
stage
==
1
)
{
// меняешь этап на 2
stage
=
2
;
// отправляешь нажатие 1 кнопки
send_dialog_responce
(
dialogID
,
1
,
0
,
""
)
;
// по желанию отключаешь показ диалога
return
false
;
}
else
if
(
dialogID
==
/* айди второго диалога */
2012
&&
stage
==
2
)
{
// меняешь этап на 1
stage
=
1
;
// отправляешь нажатие 1 кнопки и нужный текст, к примеру "test"
send_dialog_responce
(
dialogID
,
1
,
0
,
"test"
)
;
// по желанию отключаешь показ диалога
return
false
;
}
}
return
true
;
}
 
Ответить с цитированием