
05.03.2021, 17:51
|
|
Участник форума
Регистрация: 07.10.2015
Сообщений: 237
С нами:
5578435
Репутация:
78
|
|
Как отправить сообщение в чат в SAMPFUNCS?
|
|
|

05.03.2021, 18:36
|
|
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами:
3174020
Репутация:
213
|
|
Сообщение от Compich
Как отправить сообщение в чат в SAMPFUNCS?
Код:
SF->getSAMP()->getPlayers()->pLocalPlayer->Say("говно");
|
|
|

06.03.2021, 18:27
|
|
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами:
3781678
Репутация:
113
|
|
как для имгуя можно использовать кириллицу без u8?
в переменной хранится текст
Код:
Код:
ImGui::Text(u8"%s", text);
пытался так, но не получалось
|
|
|

06.03.2021, 19:12
|
|
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами:
3174020
Репутация:
213
|
|
Сообщение от anticoder
как для имгуя можно использовать кириллицу без u8?
в переменной хранится текст
Код:
Код:
ImGui::Text(u8"%s", text);
пытался так, но не получалось
чтобы использовать переменную text в imgui, тебе надо сначало пеконвертировать её из cp1251 в utf8. вот функция, что делает это к примеру:
C++:
Код:
std
::
string
CP1251_to_UTF8
(
const
char
*
str
)
{
std
::
string res
;
int
result_u
,
result_c
;
result_u
=
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
0
,
0
)
;
if
(
!
result_u
)
{
return
0
;
}
wchar_t
*
ures
=
new
wchar_t
[
result_u
]
;
if
(
!
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
ures
,
result_u
)
)
{
delete
[
]
ures
;
return
0
;
}
result_c
=
WideCharToMultiByte
(
65001
,
0
,
ures
,
-
1
,
0
,
0
,
0
,
0
)
;
if
(
!
result_c
)
{
delete
[
]
ures
;
return
0
;
}
char
*
cres
=
new
char
[
result_c
]
;
if
(
!
WideCharToMultiByte
(
65001
,
0
,
ures
,
-
1
,
cres
,
result_c
,
0
,
0
)
)
{
delete
[
]
cres
;
return
0
;
}
delete
[
]
ures
;
res
.
append
(
cres
)
;
delete
[
]
cres
;
return
res
;
}
|
|
|

07.03.2021, 13:37
|
|
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами:
3781678
Репутация:
113
|
|
блокировка управления игроком (lockPlayerControl - lua), для плюсов есть адрес?
|
|
|

07.03.2021, 14:08
|
|
Постоянный
Регистрация: 05.08.2018
Сообщений: 372
С нами:
4091290
Репутация:
213
|
|
C++:
Код:
void
GTAfunc_TogglePlayerControllable
(
bool
bToggle
)
{
DWORD func
=
0x56E870
;
float
fTen
=
10.0f
;
_asm
{
mov ecx
,
0x00B7CD98
push fTen
push bToggle
call func
}
}
|
|
|

11.03.2021, 16:54
|
|
Участник форума
Регистрация: 08.03.2019
Сообщений: 121
С нами:
3781678
Репутация:
113
|
|
Сообщение от AdCKuY_DpO4uLa
C++:
Код:
void
GTAfunc_TogglePlayerControllable
(
bool
bToggle
)
{
DWORD func
=
0x56E870
;
float
fTen
=
10.0f
;
_asm
{
mov ecx
,
0x00B7CD98
push fTen
push bToggle
call func
}
}
в луа немножко не этот адрес используется
|
|
|

11.03.2021, 17:52
|
|
Постоянный
Регистрация: 05.08.2018
Сообщений: 372
С нами:
4091290
Репутация:
213
|
|
Сообщение от anticoder
в луа немножко не этот адрес используется
Это имеет большое значение? Человеку нужно было заблокировать управление игроком, функция вполне справляется с этим
|
|
|

08.03.2021, 23:47
|
|
Участник форума
Регистрация: 07.10.2015
Сообщений: 237
С нами:
5578435
Репутация:
78
|
|
Как выбрать определенный пункт диалога (DIALOG_STYLE_LIST), нажать первую кнопку, ввести значение в поле диалога (DIALOG_STYLE_INPUT) и опять нажать первую кнопку? (SAMPFUNCS)
|
|
|

09.03.2021, 00:04
|
|
Постоянный
Регистрация: 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
;
}
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|