HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #3891  
Старый 07.08.2019, 23:51
Cake_
Участник форума
Регистрация: 04.04.2017
Сообщений: 263
С нами: 4793630

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

как реализована эта функция?

C++:





Код:
bool
SFSAMP
::
registerChatCommand
(
std
::
string command
,
CommandProc callback
)
 
Ответить с цитированием

  #3892  
Старый 08.08.2019, 00:15
ALF
Постоянный
Регистрация: 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
 
Ответить с цитированием

  #3893  
Старый 08.08.2019, 14:31
CatKnight
Участник форума
Регистрация: 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
;
}
 
Ответить с цитированием

  #3894  
Старый 08.08.2019, 14:42
Cake_
Участник форума
Регистрация: 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
 
Ответить с цитированием

  #3895  
Старый 08.08.2019, 14:57
CatKnight
Участник форума
Регистрация: 26.11.2015
Сообщений: 148
С нами: 5506473

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

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

Привет, сталкивался с похожей проблемой и мне помогало лишь полная замена проекта на стандартный сфовский от urshadow
Это звучит смешно, но просто переименовав плагин с "SFPlugin" на любое другое название, он стал нормально выгружается/загружается . Пробовал как проект из 5.3.3, так и 5.4.1, и везде не выгружался полностью с дефолтным названием. Ладно, спасибо.
 
Ответить с цитированием

  #3896  
Старый 09.08.2019, 15:40
damag
Познавший АНТИЧАТ
Регистрация: 14.06.2018
Сообщений: 1,150
С нами: 4165677

Репутация: 183


По умолчанию

Как получить данную иконку и использовать ее?

 
Ответить с цитированием

  #3897  
Старый 09.08.2019, 16:16
ALF
Постоянный
Регистрация: 14.11.2017
Сообщений: 319
С нами: 4472205

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

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

Как получить данную иконку и использовать ее?
fontawesome
 
Ответить с цитированием

  #3898  
Старый 10.08.2019, 00:44
Adder
Новичок
Регистрация: 01.11.2013
Сообщений: 22
С нами: 6593689

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

В сампфунксе для изменения текстдрава, можно использовать данные две функции:

Код:





Код:
SF->getSAMP()->getInfo()->pPools->pTextdraw->Delete();
SF->getSAMP()->getInfo()->pPools->pTextdraw->Create();


А как можно перезаписать текстдрав в собейте. Если можно пример. Спасибо
 
Ответить с цитированием

  #3899  
Старый 10.08.2019, 01:21
Adder
Новичок
Регистрация: 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
 
Ответить с цитированием

  #3900  
Старый 10.08.2019, 01:44
Cake_
Участник форума
Регистрация: 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)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Внести депозит

Введите сумму USDT:

Принимается только USDT TRC20. Fake/Flash USDT не засчитывается.

×

Вывести депозит

Сумма USDT:

Ваш USDT TRC20 кошелек:

Заявка будет отправлена администратору.