 |
|

07.08.2019, 23:51
|
|
Участник форума
Регистрация: 04.04.2017
Сообщений: 263
С нами:
4793630
Репутация:
133
|
|
как реализована эта функция?
C++:
Код:
bool
SFSAMP
::
registerChatCommand
(
std
::
string command
,
CommandProc callback
)
|
|
|

08.08.2019, 00:15
|
|
Постоянный
Регистрация: 14.11.2017
Сообщений: 319
С нами:
4472205
Репутация:
163
|
|
Сообщение от Cake_
как реализована эта функция?
C++:
Код:
bool
SFSAMP
::
registerChatCommand
(
std
::
string command
,
CommandProc callback
)
BlastHackNet/mod_s0beit_sa-1
Multi-purpose cheat tool for GTA San Andreas and SA:MP - BlastHackNet/mod_s0beit_sa-1
github.com
|
|
|

08.08.2019, 14:31
|
|
Участник форума
Регистрация: 26.11.2015
Сообщений: 148
С нами:
5506473
Репутация:
78
|
|
Кто-нибудь сталкивался с подобным? В какой-то момент перестал полностью выгружаться плагин. Не важно, как я его заполню, он всё равно полностью не выгружается. DLL_PROCESS_DETACH не вызывается при выгрузке (но вызывается, когда полностью из игры выходишь ), при этом все команды освобождаются, но сам плагин как бы подключён, но SF его уже не видит, и когда снова пытаешься выгрузить плагин, в консоли пишет, что такой плагин не найден. Есть решение?
Вот обычный пример:
main.cpp:
Код:
#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
104
,
255
,
192
)
,
"@@@"
)
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
{
SF
->
initPlugin
(
mainloop
,
hModule
)
;
// ...
}
if
(
dwReasonForCall
==
DLL_PROCESS_DETACH
)
{
// ...
}
return
TRUE
;
}
|
|
|

08.08.2019, 14:42
|
|
Участник форума
Регистрация: 04.04.2017
Сообщений: 263
С нами:
4793630
Репутация:
133
|
|
Сообщение от CatKnight
Кто-нибудь сталкивался с подобным? В какой-то момент перестал полностью выгружаться плагин. Не важно, как я его заполню, он всё равно полностью не выгружается. DLL_PROCESS_DETACH не вызывается при выгрузке (но вызывается, когда полностью из игры выходишь ), при этом все команды освобождаются, но сам плагин как бы подключён, но SF его уже не видит, и когда снова пытаешься выгрузить плагин, в консоли пишет, что такой плагин не найден. Есть решение?
Вот обычный пример:
main.cpp:
Код:
#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
104
,
255
,
192
)
,
"@@@"
)
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
{
SF
->
initPlugin
(
mainloop
,
hModule
)
;
// ...
}
if
(
dwReasonForCall
==
DLL_PROCESS_DETACH
)
{
// ...
}
return
TRUE
;
}
Привет, сталкивался с похожей проблемой и мне помогало лишь полная замена проекта на стандартный сфовский от urshadow
|
|
|

08.08.2019, 14:57
|
|
Участник форума
Регистрация: 26.11.2015
Сообщений: 148
С нами:
5506473
Репутация:
78
|
|
Сообщение от Cake_
Привет, сталкивался с похожей проблемой и мне помогало лишь полная замена проекта на стандартный сфовский от urshadow
Это звучит смешно, но просто переименовав плагин с "SFPlugin" на любое другое название, он стал нормально выгружается/загружается . Пробовал как проект из 5.3.3, так и 5.4.1, и везде не выгружался полностью с дефолтным названием. Ладно, спасибо.
|
|
|

09.08.2019, 15:40
|
|
Познавший АНТИЧАТ
Регистрация: 14.06.2018
Сообщений: 1,150
С нами:
4165677
Репутация:
183
|
|
Как получить данную иконку и использовать ее?

|
|
|

09.08.2019, 16:16
|
|
Постоянный
Регистрация: 14.11.2017
Сообщений: 319
С нами:
4472205
Репутация:
163
|
|
Сообщение от Damag
Как получить данную иконку и использовать ее?
fontawesome
|
|
|

10.08.2019, 00:44
|
|
Новичок
Регистрация: 01.11.2013
Сообщений: 22
С нами:
6593689
Репутация:
51
|
|
В сампфунксе для изменения текстдрава, можно использовать данные две функции:
Код:
Код:
SF->getSAMP()->getInfo()->pPools->pTextdraw->Delete();
SF->getSAMP()->getInfo()->pPools->pTextdraw->Create();
А как можно перезаписать текстдрав в собейте. Если можно пример. Спасибо
|
|
|

10.08.2019, 01:21
|
|
Новичок
Регистрация: 01.11.2013
Сообщений: 22
С нами:
6593689
Репутация:
51
|
|
Сообщение от Cake_
Как по мне это гавно метод. Лучше в хуке на рпк менять
Пробовал в хуке вот так:
Код:
Код:
if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowTextDraw)
{
stTextDrawTransmit txd;
WORD txdID, cTextLen; char cText[800];
params->bitStream->ResetReadPointer();
params->bitStream->Read(txdID);
params->bitStream->Read((PCHAR)&txd, sizeof(stTextDrawTransmit));
params->bitStream->Read(cTextLen);
params->bitStream->Read(cText, cTextLen);
params->bitStream->ResetReadPointer();
cText[cTextLen] = '\0';
if (txdID == 6) {
params->bitStream->ResetWritePointer();
params->bitStream->Write(txdID);
params->bitStream->Write((PCHAR)&txd, sizeof(stTextDrawTransmit));
strcpy_s(cText, "Test");
params->bitStream->Write(cText, strlen(cText));
}
return true;
}
Видно я не правильно перезаписываю, потому что в чат выбивает вот это: Warning: ignoring large TextDraw size=25940
|
|
|

10.08.2019, 01:44
|
|
Участник форума
Регистрация: 04.04.2017
Сообщений: 263
С нами:
4793630
Репутация:
133
|
|
Сообщение от Adder
Пробовал в хуке вот так:
Код:
Код:
if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowTextDraw)
{
stTextDrawTransmit txd;
WORD txdID, cTextLen; char cText[800];
params->bitStream->ResetReadPointer();
params->bitStream->Read(txdID);
params->bitStream->Read((PCHAR)&txd, sizeof(stTextDrawTransmit));
params->bitStream->Read(cTextLen);
params->bitStream->Read(cText, cTextLen);
params->bitStream->ResetReadPointer();
cText[cTextLen] = '\0';
if (txdID == 6) {
params->bitStream->ResetWritePointer();
params->bitStream->Write(txdID);
params->bitStream->Write((PCHAR)&txd, sizeof(stTextDrawTransmit));
strcpy_s(cText, "Test");
params->bitStream->Write(cText, strlen(cText));
}
return true;
}
Видно я не правильно перезаписываю, потому что в чат выбивает вот это: Warning: ignoring large TextDraw size=25940
Вот так надо
C++:
Код:
bool
CALLBACK
incomingRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
ScriptRPCEnumeration
::
RPC_ScrShowTextDraw
)
{
WORD wTextID
,
cTextLen
;
stTextDrawTransmit data
;
char
cText
[
65535
]
;
BitStream
*
bsData
=
params
->
bitStream
;
bsData
->
Read
(
wTextID
)
;
bsData
->
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stTextDrawTransmit
)
)
;
bsData
->
Read
(
cTextLen
)
;
bsData
->
Read
(
cText
,
cTextLen
)
;
cText
[
cTextLen
]
=
'\0'
;
stTextDrawTransmit MyTD
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
GetTransmit
(
125
,
MyTD
)
;
MyTD
.
fBoxHeight
=
0.249999
;
MyTD
.
fLetterWidth
=
0.300000
;
MyTD
.
dwBoxColor
=
-
16776961
;
MyTD
.
byteShadow
=
0
;
MyTD
.
byteOutline
=
-
1
;
MyTD
.
dwBackgroundColor
=
-
1
;
MyTD
.
byteStyle
=
2
;
MyTD
.
byteProportional
=
1
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
125
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Create
(
125
,
&
MyTD
,
"DIAMOND"
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
126
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
127
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
128
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
129
)
;
}
;
return
true
;
}
;
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|