PDA

Просмотр полной версии : С/С++ Вопрос - Ответ


Страницы : 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Dark_Knight
18.07.2017, 22:46
Ты через хук буллет даты можешь перезаписать входящие патроны и исходящие.

Sia
19.07.2017, 15:01
C++:





[CODE]
int
main
(
)
{
SetConsoleTitle
(
"Protect For SAMP [0.3.7]"
)
;
while
(
hWnd
==
0
)
{
hWnd
=
FindWindow
(
0
,
"GTA:SA:MP"
)
;
Sleep
(
100
)
;
}
cout





Хочу получить адресс на педа , что бы получать его координаты ну или если кто может посказать адресс для проверки в зоне стрима , что нибудь из этого.

Но почему то когда указываю ID игрока , "PED:" возвращает 0.

itsLegend
19.07.2017, 19:32
Неправильно читаешь pRemotePlayer.

Sia
22.07.2017, 17:40
Неправильно читаешь pRemotePlayer.


Не понимаю всё равно , где там ошибочка то?

Переписывал с AHK UDF , знаю что AHK ещё тот язык ... Но всё же , копипаст с него идёт.

iAmerican
24.07.2017, 21:58
Объясните пожалуйста , можно ли хранить в Visual Studio проект онлайн? При этом что бы можно было его компилировать.

Смотрел что то про Azure , но толком не понял там не чего. Кто с этим сталкивался , дайте гайдик)

Jack_Savage
27.07.2017, 11:03
Кто то знает как в awesomium вызвать InjectKeyboardEvent из другого потока?

Потому что если вызвать его напрямую из WndProc то будет краш...

"Необработанное исключение по адресу 0x03A454BF (awesomium.dll) в gta.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x000000D8."

Я хуком d3d его пытаюсь рендерить его.

Рендерится все отлично а вот при попытке вызвать InjectKeyboardEvent игра крашится...

Я так понимаю это потому что игра визывает эту функцию из своего потока а он создан по сути в потоке _beginthread (из dll)

Petr_Sergeevich
04.08.2017, 13:35
Здравствуйте. Как скомпилировать файл в .sf?



#include

#include

#include

#include

#include "SAMPFUNCS_API.h"

#include "game_api\game_api.h"

SAMPFUNCS *SF = new SAMPFUNCS();

void CALLBACK cmd_show_info_player(std::string param)

{

if (param.empty()) return;

int i = std::stoi(param);

char buf[128];

stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer;

if (!pPlayer) return;

sprintf(buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",

pPlayer->szPlayerName,

pPlayer->iPing,

pPlayer->iScore,

pPlayer->iIsNPC,

pPlayer->pPlayerData->iAFKState == 2);

SF->getSAMP()->getChat()->AddChatMessage(-1, buf);

};

void CALLBACK mainloop()

{

static bool init = false;

if (!init)

{

if (GAME == nullptr)

return;

if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)

return;

if (!SF->getSAMP()->IsInitialized())

return;

SF->getSAMP()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 0, 0xAA, 0 ), "SAMPFUNCS Plugin loaded." );

SF->getSAMP()->registerChatCommand("showinfo", cmd_show_info_player);

init = true;

}

}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)

{

switch (dwReasonForCall)

{

case DLL_PROCESS_ATTACH:

SF->initPlugin(mainloop, hModule);

break;

case DLL_THREAD_ATTACH:

case DLL_THREAD_DETACH:

case DLL_PROCESS_DETACH:

break;

}

return TRUE;

}

NarutoUA
04.08.2017, 13:39
Объясните пожалуйста , можно ли хранить в Visual Studio проект онлайн? При этом что бы можно было его компилировать.
Смотрел что то про Azure , но толком не понял там не чего. Кто с этим сталкивался , дайте гайдик)


Можно, гугли TFS. Но все равно код прийдется параллельно хранить у себя (и на сервере). Билдить можно на их стороне.

samp is meme
04.08.2017, 13:43
Здравствуйте. Как скомпилировать файл в .sf?



#include

#include

#include

#include

#include "SAMPFUNCS_API.h"

#include "game_api\game_api.h"

SAMPFUNCS *SF = new SAMPFUNCS();

void CALLBACK cmd_show_info_player(std::string param)

{

if (param.empty()) return;

int i = std::stoi(param);

char buf[128];

stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer;

if (!pPlayer) return;

sprintf(buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",

pPlayer->szPlayerName,

pPlayer->iPing,

pPlayer->iScore,

pPlayer->iIsNPC,

pPlayer->pPlayerData->iAFKState == 2);

SF->getSAMP()->getChat()->AddChatMessage(-1, buf);

};

void CALLBACK mainloop()

{

static bool init = false;

if (!init)

{

if (GAME == nullptr)

return;

if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)

return;

if (!SF->getSAMP()->IsInitialized())

return;

SF->getSAMP()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 0, 0xAA, 0 ), "SAMPFUNCS Plugin loaded." );

SF->getSAMP()->registerChatCommand("showinfo", cmd_show_info_player);

init = true;

}

}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)

{

switch (dwReasonForCall)

{

case DLL_PROCESS_ATTACH:

SF->initPlugin(mainloop, hModule);

break;

case DLL_THREAD_ATTACH:

case DLL_THREAD_DETACH:

case DLL_PROCESS_DETACH:

break;

}

return TRUE;

}





SF Api, нужна VS.

Petr_Sergeevich
04.08.2017, 13:46
SF Api, нужна VS.



Само собой, код написал там, куда дальше нажимать? Как скомпилировать? (VS 2017 Community)

(https://www.blast.hk/wiki/tutorials:api_lesson_basics)

Dark_Knight
04.08.2017, 14:20
Само собой, код написал там, куда дальше нажимать? Как скомпилировать? (VS 2017 Community)

(https://www.blast.hk/wiki/tutorials:api_lesson_basics)


Основы изучи сначала, а потом уже с апи работай

samp is meme
04.08.2017, 14:41
Само собой, код написал там, куда дальше нажимать? Как скомпилировать? (VS 2017 Community)

(https://www.blast.hk/wiki/tutorials:api_lesson_basics)



Screenshot_13.pngsamp is meme · 4 Авг 2017 в 13:41' data-fancybox="lb-post-154245" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/8429/" style="cursor: pointer;" title="Screenshot_13.png">
https://forum.antichat.xyz/attachments/27154245/

memir
05.08.2017, 17:29
Как из DLL сделать ASI? Если просто переименовать - не работает. Писал на Visual C++. ASI loader стоит.

BlackKnigga
05.08.2017, 17:33
Как из DLL сделать ASI? Если просто переименовать - не работает. Писал на Visual C++. ASI loader стоит.


Другие аси грузит? Asi и dll это одно и то же

memir
05.08.2017, 17:38
Другие аси грузит? Asi и dll это одно и то же


Другие АСИ грузит прекрасно.

iAmerican
05.08.2017, 19:11
Другие АСИ грузит прекрасно.


Код покажи.

memir
05.08.2017, 22:38
Код покажи.


Если инжектить через cheat engine - то все работает.

C++:






LRESULT defwndproc
;
LRESULT CALLBACK
WindowProc
(
HWND hwnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
uMsg
==
WM_KEYDOWN
)
{
switch
(
wParam
)
{
case
VK_LEFT
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYDOWN
,
VK_NUMPAD4
,
lParam
)
;
break
;
case
VK_RIGHT
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYDOWN
,
VK_NUMPAD6
,
lParam
)
;
break
;
case
VK_UP
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYDOWN
,
VK_NUMPAD8
,
lParam
)
;
break
;
case
VK_DOWN
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYDOWN
,
VK_NUMPAD2
,
lParam
)
;
break
;
}
}
if
(
uMsg
==
WM_KEYUP
)
{
switch
(
wParam
)
{
case
VK_LEFT
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYUP
,
VK_NUMPAD4
,
lParam
)
;
break
;
case
VK_RIGHT
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYUP
,
VK_NUMPAD6
,
lParam
)
;
break
;
case
VK_UP
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYUP
,
VK_NUMPAD8
,
lParam
)
;
break
;
case
VK_DOWN
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYUP
,
VK_NUMPAD2
,
lParam
)
;
break
;
}
}
return
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
uMsg
,
wParam
,
lParam
)
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
defwndproc
=
SetWindowLongA
(
FindWindowA
(
0
,
"GTA:SA:MP"
)
,
GWL_WNDPROC
,
LONG
(
WindowProc
)
)
;
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}

itsLegend
05.08.2017, 22:49
Если инжектить через cheat engine - то все работает.


Название окна становится GTA:SA:MP только после того, как загрузится сам самп (покажется чат и игра, естественно).

Alfinity
06.08.2017, 12:41
Ребят, может кто объяснить как работать с камерой средствами СФ(устанавливать позицию) ну и мелкие нюансы, если есть?

iAmerican
06.08.2017, 18:22
Если инжектить через cheat engine - то все работает.

C++:






LRESULT defwndproc
;
LRESULT CALLBACK
WindowProc
(
HWND hwnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
uMsg
==
WM_KEYDOWN
)
{
switch
(
wParam
)
{
case
VK_LEFT
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYDOWN
,
VK_NUMPAD4
,
lParam
)
;
break
;
case
VK_RIGHT
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYDOWN
,
VK_NUMPAD6
,
lParam
)
;
break
;
case
VK_UP
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYDOWN
,
VK_NUMPAD8
,
lParam
)
;
break
;
case
VK_DOWN
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYDOWN
,
VK_NUMPAD2
,
lParam
)
;
break
;
}
}
if
(
uMsg
==
WM_KEYUP
)
{
switch
(
wParam
)
{
case
VK_LEFT
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYUP
,
VK_NUMPAD4
,
lParam
)
;
break
;
case
VK_RIGHT
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYUP
,
VK_NUMPAD6
,
lParam
)
;
break
;
case
VK_UP
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYUP
,
VK_NUMPAD8
,
lParam
)
;
break
;
case
VK_DOWN
:
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
WM_KEYUP
,
VK_NUMPAD2
,
lParam
)
;
break
;
}
}
return
CallWindowProcA
(
WNDPROC
(
defwndproc
)
,
hwnd
,
uMsg
,
wParam
,
lParam
)
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD ul_reason_for_call
,
LPVOID lpReserved
)
{
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
defwndproc
=
SetWindowLongA
(
FindWindowA
(
0
,
"GTA:SA:MP"
)
,
GWL_WNDPROC
,
LONG
(
WindowProc
)
)
;
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}





ASI инжектится моментально , при запуске процесса(точно не знаю).

Так что добавляй цикл.

C++:






HWND hWnd
=
0
;
while
(
hWnd
==
0
)
{
hWnd
=
FindWindow
(
0
,
"GTA:SA:MP"
)
;
Sleep
(
100
)
;
}

samp is meme
07.08.2017, 14:00
Какие сервисы существуют для работы нескольких людей над одним сурсом? Чтобы несколько людей могло вносить изменения туда.

Dark_Knight
07.08.2017, 14:20
TFS, github

NarutoUA
07.08.2017, 14:29
Еще могу посоветовать gitlab, там есть приватные репозитории (бесплатно). Но если ты полный нуб то лучше тфс использовать, он интегрирован в студию и в гуи все нужные команды

memir
07.08.2017, 20:51
ASI инжектится моментально , при запуске процесса(точно не знаю).

Так что добавляй цикл.

C++:






HWND hWnd
=
0
;
while
(
hWnd
==
0
)
{
hWnd
=
FindWindow
(
0
,
"GTA:SA:MP"
)
;
Sleep
(
100
)
;
}





Проблема в том, что я не могу добавить цикл, ибо с ним все зависает.

sаnеk
15.08.2017, 19:17
при компилировании возникла ошибка http://prntscr.com/g8smaj (https://www.blast.hk/redirect/aHR0cDovL3BybnRzY3IuY29tL2c4c21hag)

как фиксануть? где объявить эту переменную?

C&J
17.08.2017, 11:43
Возможно ли узнать скины других игроков через память игры?

DarkP1xel
17.08.2017, 14:18
Возможно ли узнать скины других игроков через память игры?


Возможно.

ishi
18.08.2017, 22:55
C++:






stOnFootData sync
;
memset
(
&
sync
,
0
,
sizeof
(
stOnFootData
)
)
;
sync
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
sync
.
sKeys
=
131072
;
BitStream bsActorSync
;
bsActorSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsActorSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsActorSync
)
;




Пытаюсь отправить нажатие клавиши N через синхру, но почему-то именно эта клавиша (а ещё Y) не отсылается (при нажатии sKeys остаётся 0), но при этом если заноппить "ноги", сервер перестанет реагировать на нажатие, что говорит о том что оно отсылается-таки через них.

Ну и вопрос: что не так? коды клавиш взял отсюда, способ заполнения и отправки взял отсюда, даже на всякий проверил на соответствие правильному варианту структуры samp.lua (https://github.com/THE-FYP/SAMP.Lua/blob/master/samp/synchronization.lua)

BlackKnigga
18.08.2017, 22:59
C++:






stOnFootData sync
;
memset
(
&
sync
,
0
,
sizeof
(
stOnFootData
)
)
;
sync
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
sync
.
sKeys
=
131072
;
BitStream bsActorSync
;
bsActorSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsActorSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsActorSync
)
;




Пытаюсь отправить нажатие клавиши N через синхру, но почему-то именно эта клавиша (а ещё Y) не отсылается (при нажатии sKeys остаётся 0), но при этом если заноппить "ноги", сервер перестанет реагировать на нажатие, что говорит о том что оно отсылается-таки через них.
Ну и вопрос: что не так? коды клавиш взял отсюда, способ заполнения и отправки взял отсюда, даже на всякий проверил на соответствие правильному варианту структуры samp.lua (https://github.com/THE-FYP/SAMP.Lua/blob/master/samp/synchronization.lua)


Чекни через раклоггер точный номер клавиши

Я отправлял нажатие N и там было точно не то что ты отправляешь

SR_team
18.08.2017, 23:03
sync.sKeys = 131072;


2 байта - максимум 65535. В цикле лови пакет и выводи значение sKeys на экран, не двигаясь (что бы было 0) нажми N, и узнаешь какое значение за нее отвечает

CarLCas
19.08.2017, 12:16
C++:






stOnFootData sync
;
memset
(
&
sync
,
0
,
sizeof
(
stOnFootData
)
)
;
sync
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
sync
.
sKeys
=
131072
;
BitStream bsActorSync
;
bsActorSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsActorSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsActorSync
)
;




Пытаюсь отправить нажатие клавиши N через синхру, но почему-то именно эта клавиша (а ещё Y) не отсылается (при нажатии sKeys остаётся 0), но при этом если заноппить "ноги", сервер перестанет реагировать на нажатие, что говорит о том что оно отсылается-таки через них.
Ну и вопрос: что не так? коды клавиш взял отсюда, способ заполнения и отправки взял отсюда, даже на всякий проверил на соответствие правильному варианту структуры samp.lua (https://github.com/THE-FYP/SAMP.Lua/blob/master/samp/synchronization.lua)


На сколько я помню нажатие Y передаётся в currentWeapon, скорее всего нажатие N передаётся аналогичным образом.

BlackKnigga
19.08.2017, 12:24
На сколько я помню нажатие Y передаётся в currentWeapon, скорее всего нажатие N передаётся аналогичным образом.


Да, так и есть



C++:






stOnFootData sync
;
memset
(
&
sync
,
0
,
sizeof
(
stOnFootData
)
)
;
sync
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
sync
.
sKeys
=
131072
;
BitStream bsActorSync
;
bsActorSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsActorSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsActorSync
)
;




Пытаюсь отправить нажатие клавиши N через синхру, но почему-то именно эта клавиша (а ещё Y) не отсылается (при нажатии sKeys остаётся 0), но при этом если заноппить "ноги", сервер перестанет реагировать на нажатие, что говорит о том что оно отсылается-таки через них.
Ну и вопрос: что не так? коды клавиш взял отсюда, способ заполнения и отправки взял отсюда, даже на всякий проверил на соответствие правильному варианту структуры samp.lua (https://github.com/THE-FYP/SAMP.Lua/blob/master/samp/synchronization.lua)


Вот тебе функция:

C++:






void
EmulKey
(
int
KeyId
)
{
stOnFootData sync
;
memset
(
&
sync
,
0
,
sizeof
(
stOnFootData
)
)
;
sync
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
sync
.
byteCurrentWeapon
=
KeyId
;
BitStream bsActorSync
;
bsActorSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsActorSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsActorSync
)
;
memset
(
&
bsActorSync
,
0
,
sizeof
(
BitStream
)
)
;
sync
.
byteCurrentWeapon
=
0
;
bsActorSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsActorSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsActorSync
)
;
}

ishi
19.08.2017, 21:41
Да, так и есть

Вот тебе функция:

C++:






void
EmulKey
(
int
KeyId
)
{
stOnFootData sync
;
memset
(
&
sync
,
0
,
sizeof
(
stOnFootData
)
)
;
sync
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
sync
.
byteCurrentWeapon
=
KeyId
;
BitStream bsActorSync
;
bsActorSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsActorSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsActorSync
)
;
memset
(
&
bsActorSync
,
0
,
sizeof
(
BitStream
)
)
;
sync
.
byteCurrentWeapon
=
0
;
bsActorSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsActorSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsActorSync
)
;
}





так у тебя же там повторяется код, или это я слепой?

BlackKnigga
19.08.2017, 22:01
так у тебя же там повторяется код, или это я слепой?


Все правильно, сначала отправляем зажатую клавишу, потом отжатую. Это надежнее чем простой спам пакетами

SR_team
19.08.2017, 22:07
Все правильно, сначала отправляем зажатую клавишу, потом отжатую. Это надежнее чем простой спам пакетами


он сам отправит отжатую же. Ты ведь не держишь клавишу. И почему KeyId - int, если CurrentWeapon всего байт?

BlackKnigga
19.08.2017, 22:09
он сам отправит отжатую же. Ты ведь не держишь клавишу. И почему KeyId - int, если CurrentWeapon всего байт?


Заодно и убережет от зажатой клавишы тогда.

А по второму - функция не моя, нашел тут и скинул

sаnеk
20.08.2017, 15:47
как прочитать 99 строчку из чата?

itsLegend
20.08.2017, 15:50
как прочитать 99 строчку из чата?


Если строки чата хранятся в массиве, то наверно нужно прочитать массив по индексу 99.

sаnеk
20.08.2017, 15:51
Если строки чата хранятся в массиве, то наверно нужно прочитать массив по индексу 99.


есть где функи посмотреть?

itsLegend
20.08.2017, 15:56
есть где функи посмотреть?


Какие функи? Получаешь указатель на массив, читаешь его.

memir
22.08.2017, 21:53
Как реализовать бесконечный цикл в DLL файле без остановки основной программы?

DarkP1xel
23.08.2017, 00:28
Как реализовать бесконечный цикл в DLL файле без остановки основной программы?


Создать поток.

VovaDit
28.08.2017, 10:59
1.Ваш вопрос: Ребят, хотел поинтересоваться. Вот у меня есть программа написанная вроде как на с++, предназначена для сампа. Одна из функций это считываение инфы с гугл таблицы и вывод в игру, типо проверка на ЧС. Только там уже устаревшая таблица привязана, возможно ли как нибудь отредактировать прогу?

randazzo
28.08.2017, 11:25
1.Ваш вопрос: Ребят, хотел поинтересоваться. Вот у меня есть программа написанная вроде как на с++, предназначена для сампа. Одна из функций это считываение инфы с гугл таблицы и вывод в игру, типо проверка на ЧС. Только там уже устаревшая таблица привязана, возможно ли как нибудь отредактировать прогу?


если исходника нет, то скорее всего нельзя

iAmerican
28.08.2017, 15:12
1.Ваш вопрос: Ребят, хотел поинтересоваться. Вот у меня есть программа написанная вроде как на с++, предназначена для сампа. Одна из функций это считываение инфы с гугл таблицы и вывод в игру, типо проверка на ЧС. Только там уже устаревшая таблица привязана, возможно ли как нибудь отредактировать прогу?


Вообще надо в таком случае прикладывать саму программу , раз такие вопросы задаешь. И я думаю она написана на AHK , а не на плюсах.

А с ахк дело уже намного проще.

ishi
29.08.2017, 11:33
Как сделать так, чтоб деструктор сам срабатывал после использования любого из элементов класса?

NarutoUA
29.08.2017, 12:06
что вы несете

ishi
29.08.2017, 12:47
Я читал что деструктор сам вызовется, если класс будет вызван в цикле и цикл прекратится, но мне стало интересно, можно ли сделать тоже самое, но без циклов, рекурсией там или ещё как

Может я несу бред, но я не знаю ответа и потому лишь строю догадки и задаю вопросы, разве это не логично?

itsLegend
29.08.2017, 13:02
Я читал что деструктор сам вызовется, если класс будет вызван в цикле и цикл прекратится


Это называется область видимости переменных. После завершения блока переменная уничтожается. Пример работы можешь посмотреть здесь: C++ Shell (http://cpp.sh/3fmtj) (https://www.blast.hk/redirect/aHR0cDovL2NwcC5zaC8zZm10ag)

Деструктор также автоматически вызывается при delete.

NarutoUA
29.08.2017, 13:14
Я читал что деструктор сам вызовется, если класс будет вызван в цикле и цикл прекратится, но мне стало интересно, можно ли сделать тоже самое, но без циклов, рекурсией там или ещё как
Может я несу бред, но я не знаю ответа и потому лишь строю догадки и задаю вопросы, разве это не логично?


Что значит "вызвать класс"?

kuleer
02.09.2017, 14:24
Когда пытаюсь копмилировать проект, творится какая то хрень, открывается Msbuild, и начинает флудить каждые 3 минуты открывается новый вот скрин: Как исправить?

Версия visual studio 2013

Vandal™
08.09.2017, 18:59
C++:






case
ScriptRPCEnumeration
::
RPC_ScrClientMessage
:
{
DWORD dwColor
;
int
iLen
;
char
Msg
[
256
]
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
dwColor
)
;
params
->
bitStream
->
Read
(
iLen
)
;
params
->
bitStream
->
Read
(
Msg
,
iLen
)
;
char
test
[
10
]
;
sprintf
(
test
,
"0x%X"
,
dwColor
)
;
D3DCOLOR d3dColor
=
reinterpret_cast

(
test
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
d3dColor
,
"%s | 0x%X"
,
Msg
,
dwColor
)
;
}




Строки всегда зеленые. В чем проблема?

Или как лучше перезаписать тип DWORD в D3DCOLOR? Ибо с форматированием код цвета указывается верно (К примеру, "text | 0xFFCCFF00").

itsLegend
08.09.2017, 19:07
@Vandal™ (https://www.blast.hk/members/82553/) для использования цвета из ScrClientMessage в AddChatMessage необходимо привести его к типу 0xRRGGBB, вместо 0xAARRGGBB. Можешь использовать логическую операцию AND.

Karbun
08.09.2017, 21:20
Парни, только начал учиться С++, помогите пожалуйста с кодом и укажите на ошибки. Плагин должен выводить в чат ники всех игроков на сервере:

C++:






#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
vivod2
(
void
)
{
for
(
int
i
=
0
;
i

getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"%d"
)
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetPlayerName
(
i
)
;
}
}
;
void
CALLBACK
vivod1
(
std
::
string str
)
{
vivod2
(
)
;
}
;
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"vivod1"
,
vivod1
)
;
init
=
true
;
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
switch
(
dwReasonForCall
)
{
case
DLL_PROCESS_ATTACH
:
SF
->
initPlugin
(
mainloop
,
hModule
)
;
break
;
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}




Не ругайтесь слишком громко на меня, я только учусь:unknw:

sаnеk
10.09.2017, 13:03
как сделать, чтобы показывало только тех, кто в стриме? вариант с удалением этого




Код:






if ( g_Players->pRemotePlayer[i]->pPlayerData == NULL
|| g_Players->pRemotePlayer[i]->pPlayerData->pSAMP_Actor == NULL )
{
_snprintf_s( buf, sizeof(buf)-1, "Name: %s (ID: %d), not streamed in", getPlayerName(i), i );
pD3DFont_sampStuff->PrintShadow( width, height, color, buf );
height += 1.0f + pD3DFont_sampStuff->DrawHeight();
continue;
}





не поможет




C++:






int
i
;
for
(
i
=
current_player_id
;
i

iIsListed
[
i
]
!=
1
)
continue
;
rendered_players
++
;
if
(
rendered_players
>=
max_amount_players
)
return
;
if
(
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
==
NULL
||
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
->
pSAMP_Actor
==
NULL
)
{
_snprintf_s
(
buf
,
sizeof
(
buf
)
-
1
,
"Name: %s (ID: %d), not streamed in"
,
getPlayerName
(
i
)
,
i
)
;
pD3DFont_sampStuff
->
PrintShadow
(
width
,
height
,
color
,
buf
)
;
height
+=
1.0f
+
pD3DFont_sampStuff
->
DrawHeight
(
)
;
continue
;
}
if
(
!
getPlayerPos
(
i
,
pos
)
)
continue
;
color
=
samp_color_get
(
i
)
;
const
char
*
szPlayerName
=
getPlayerName
(
i
)
;
int
iPlayerHealth
=
(
int
)
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
->
fActorHealth
;
int
iPlayerArmor
=
(
int
)
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
->
fActorArmor
;
int
iVehicleID
=
(
int
)
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
->
sVehicleID
;
int
iVehicleHealth
;
if
(
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
!=
NULL
&&
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
->
pSAMP_Vehicle
!=
NULL
)
{
uint16_t
playerVehicleID
=
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
->
sVehicleID
;
vehicle
=
gta_vehicle_get_by_id
(
g_Vehicles
->
pSAMP_Vehicle
[
playerVehicleID
]
->
pGTA_Vehicle
->
base
.
model_alt_id
)
;
iVehicleHealth
=
(
int
)
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
->
pSAMP_Vehicle
->
pGTA_Vehicle
->
hitpoints
;
}
switch
(
getPlayerState
(
i
)
)
{
case
PLAYER_STATE_NONE
:
_snprintf_s
(
buf
,
sizeof
(
buf
)
-
1
,
"Name: %s (ID: %d), State: None"
,
szPlayerName
,
i
)
;
pD3DFont_sampStuff
->
PrintShadow
(
width
,
height
,
color
,
buf
)
;
break
;
case
PLAYER_STATE_ONFOOT
:
_snprintf_s
(
buf
,
sizeof
(
buf
)
-
1
,
"Name: %s (ID: %d), State: On foot, Health: %d, Armor: %d, Distance: %0.2f"
,
szPlayerName
,
i
,
iPlayerHealth
,
iPlayerArmor
,
vect3_dist
(
(
float
*
)
pos
,
&
self
->
base
.
matrix
[
4
*
3
]
)
)
;
pD3DFont_sampStuff
->
PrintShadow
(
width
,
height
,
color
,
buf
)
;
break
;
case
PLAYER_STATE_DRIVER
:
_snprintf_s
(
buf
,
sizeof
(
buf
)
-
1
,
"Name: %s (ID: %d), State: Driver (%s (%d)), VHealth: %d, Distance: %0.2f"
,
szPlayerName
,
i
,
vehicle
->
name
,
iVehicleID
,
iVehicleHealth
,
vect3_dist
(
(
float
*
)
pos
,
&
self
->
base
.
matrix
[
4
*
3
]
)
)
;
pD3DFont_sampStuff
->
PrintShadow
(
width
,
height
,
color
,
buf
)
;
break
;
case
PLAYER_STATE_PASSENGER
:
_snprintf_s
(
buf
,
sizeof
(
buf
)
-
1
,
"Name: %s (ID: %d), State: Passenger (%s (%d)), Distance: %0.2f"
,
szPlayerName
,
i
,
vehicle
->
name
,
iVehicleID
,
vect3_dist
(
(
float
*
)
pos
,
&
self
->
base
.
matrix
[
4
*
3
]
)
)
;
pD3DFont_sampStuff
->
PrintShadow
(
width
,
height
,
color
,
buf
)
;
break
;
case
PLAYER_STATE_WASTED
:
_snprintf_s
(
buf
,
sizeof
(
buf
)
-
1
,
"Name: %s (ID: %d), State: Wasted"
,
szPlayerName
,
i
)
;
pD3DFont_sampStuff
->
PrintShadow
(
width
,
height
,
color
,
buf
)
;
break
;
case
PLAYER_STATE_SPAWNED
:
_snprintf_s
(
buf
,
sizeof
(
buf
)
-
1
,
"Name: %s (ID: %d), State: Spawned"
,
szPlayerName
,
i
)
;
pD3DFont_sampStuff
->
PrintShadow
(
width
,
height
,
color
,
buf
)
;
break
;
}
height
+=
1.0f
+
pD3DFont_sampStuff
->
DrawHeight
(
)
;
}

SR_team
10.09.2017, 13:16
Парни, только начал учиться С++, помогите пожалуйста с кодом и укажите на ошибки. Плагин должен выводить в чат ники всех игроков на сервере:

C++:






#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
vivod2
(
void
)
{
for
(
int
i
=
0
;
i

getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"%d"
)
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetPlayerName
(
i
)
;
}
}
;
void
CALLBACK
vivod1
(
std
::
string str
)
{
vivod2
(
)
;
}
;
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"vivod1"
,
vivod1
)
;
init
=
true
;
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
switch
(
dwReasonForCall
)
{
case
DLL_PROCESS_ATTACH
:
SF
->
initPlugin
(
mainloop
,
hModule
)
;
break
;
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}




Не ругайтесь слишком громко на меня, я только учусь:unknw:


Добавь проверку на существование игрока с id i на сервере.



g_Players->pRemotePlayer->pPlayerData->pSAMP_Actor


g_Players->pRemotePlayer->pPlayerData->pSAMP_Actor->pGTA_ped или что-то типа того должно быть

sаnеk
10.09.2017, 13:56
g_Players->pRemotePlayer->pPlayerData->pSAMP_Actor->pGTA_ped или что-то типа того должно быть


крашит

SR_team
10.09.2017, 14:04
крашит


тогда не заменяй, а дополняй

sаnеk
10.09.2017, 14:12
тогда не заменяй, а дополняй


так я дополнил и крашит)
https://forum.antichat.xyz/attachments/27158975/

SR_team
10.09.2017, 14:12
так я дополнил и крашит)


ты заменил, и на скрине пруф замены

SR_team
10.09.2017, 14:14
так я дополнил и крашит)



C++:






if
(
g_Players
->
pRemotePlayer
->
pPlayerData
!=
nullptr
&&
g_Players
->
pRemotePlayer
->
pPlayerData
->
pSAMP_Actor
!=
nullptr
&&
g_Players
->
pRemotePlayer
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
!=
nullptr
)




P.S. Если не сработает, то разбить на 3 условия

sаnеk
10.09.2017, 14:50
сработало, если разбить на 3 условия, но какая-то ***ня получается

Karbun
10.09.2017, 15:58
Добавь проверку на существование игрока с id i на сервере.


Как её добавить? пробовал через g_Players (как у maks_fender), но у меня её даже нет.

CarLCas
10.09.2017, 19:13
Как её добавить? пробовал через g_Players (как у maks_fender), но у меня её даже нет.



C++:






if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
i
]
)
{
.
.
.
}

2Shae
13.09.2017, 13:06
Код:






std::string result;
DWORD nSize = 255;
GetPrivateProfileSection(LPCSTR("section"), LPSTR(&result), nSize, "SAMPFUNCS\\test.ini");
SF->Log(result.c_str());




Почему крашит, блеать?

Текст в файле:

Код:






[section]
one=lol
two=lul
three=kek

BlackKnigga
13.09.2017, 14:14
Код:






std::string result;
DWORD nSize = 255;
GetPrivateProfileSection(LPCSTR("section"), LPSTR(&result), nSize, "SAMPFUNCS\\test.ini");
SF->Log(result.c_str());




Почему крашит, блеать?

Текст в файле:

Код:






[section]
one=lol
two=lul
three=kek





Ты уверен что в функцию можно передать стринг?

NarutoUA
13.09.2017, 14:34
Код:






std::string result;
DWORD nSize = 255;
GetPrivateProfileSection(LPCSTR("section"), LPSTR(&result), nSize, "SAMPFUNCS\\test.ini");
SF->Log(result.c_str());




Почему крашит, блеать?

Текст в файле:

Код:






[section]
one=lol
two=lul
three=kek





Потому что надо документацию читать, блеать.

2Shae
13.09.2017, 14:48
Потому что надо документацию читать, блеать.





lpReturnedString [out]
A pointer to a buffer that receives the key name and value pairs associated with the named section. The buffer is filled with one or more null-terminated strings; the last string is followed by a second null character.


Как тогда достать все строки, которые в секции?



Ты уверен что в функцию можно передать стринг?


Ну, бля, конкретную строку в секции же читает.

CarLCas
13.09.2017, 15:31
Как тогда достать все строки, которые в секции?


Можно немного больше почитать насчёт типа, а не просто приводить к нему. Windows Data Types (Windows) (https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx#LPTSTR) (https://www.blast.hk/redirect/aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicm FyeS93aW5kb3dzL2Rlc2t0b3AvYWEzODM3NTEodj12cy44NSku YXNweCNMUFRTVFI)

Karbun
13.09.2017, 17:02
Почему не выводятся ники игроков? Вроде всё верно написал:mega_shok:

C++:






void
vivod2
(
void
)
{
for
(
int
i
=
0
;
i
>
SAMP_MAX_PLAYERS
,
i
++
;
)
{
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
i
]
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"%s"
)
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetPlayerName
(
i
)
;
}
}
}
;
void
CALLBACK
vivod1
(
std
::
string str
)
{
vivod2
(
)
;
}
;
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"vivod"
,
vivod1
)
;
init
=
true
;
}
}

2Shae
13.09.2017, 17:24
Почему не выводятся ники игроков? Вроде всё верно написал:mega_shok:

C++:






for
(
int
i
=
0
;
i
>
SAMP_MAX_PLAYERS
,
i
++
;
)





for (int i = 0; i

Karbun
13.09.2017, 18:46
[QUOTE="2Shae"]

for (int i = 0; i

Karbun
14.09.2017, 17:53
HELP! До цикла For все работает, но после него нет... Не знаю в чем причина.

C++:






void
vivod2
(
void
)
{
for
(
int
i
=
0
;
i

getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
i
]
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"%s"
)
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetPlayerName
(
i
)
;
}
}
}
;
void
CALLBACK
vivod1
(
std
::
string str
)
{
vivod2
(
)
;
}
;
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"vivod"
,
vivod1
)
;
init
=
true
;
}
}

CarLCas
14.09.2017, 18:06
HELP! До цикла For все работает, но после него нет... Не знаю в чем причина.

C++:






void
vivod2
(
void
)
{
for
(
int
i
=
0
;
i

getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
i
]
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"%s"
)
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetPlayerName
(
i
)
;
}
}
}
;
void
CALLBACK
vivod1
(
std
::
string str
)
{
vivod2
(
)
;
}
;
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"vivod"
,
vivod1
)
;
init
=
true
;
}
}






C++:





[CODE]
for
(
int
i
=
0
;
i

Karbun
14.09.2017, 18:42
[QUOTE="CarLCas"]

C++:






for
(
int
i
=
0
;
i

C++:





[CODE]
void
vivod2
(
void
)
{
for
(
int
i
=
0
;
i

getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
i
]
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Ник: %s [%d]"
)
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetPlayerName
(
i
)
,
i
;
}
}
}
void
CALLBACK
vivod1
(
std
::
string str
)
{
vivod2
(
)
;
}
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"vivod"
,
vivod1
)
;
init
=
true
;
}
}

CarLCas
14.09.2017, 19:22
Спасибо, теперь хотя бы что-то в чат выводит, однако не выводит ник и id какие-то астрономические:

C++:






void
vivod2
(
void
)
{
for
(
int
i
=
0
;
i

getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
i
]
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Ник: %s [%d]"
)
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetPlayerName
(
i
)
,
i
;
}
}
}
void
CALLBACK
vivod1
(
std
::
string str
)
{
vivod2
(
)
;
}
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"vivod"
,
vivod1
)
;
init
=
true
;
}
}






C++:






SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Ник: %s [%d]"
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetPlayerName
(
i
)
,
i
)
;

Karbun
15.09.2017, 16:48
C++:






SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Ник: %s [%d]"
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetPlayerName
(
i
)
,
i
)
;





Спасибо, все получилось. А задержку не подскажешь как поставить?

Dark_Knight
15.09.2017, 17:41
Таймером. Банально через GetTickCount()

iAmerican
15.09.2017, 17:42
Спасибо, все получилось. А задержку не подскажешь как поставить?


С помощью GetTickCount

Matthew3321AS
15.09.2017, 22:14
Код:






if (strstr(msg, "1"))
{
SF->getSAMP()->getPlayers()->pLocalPlayer->Say("/phone");
SendInput('13', 0, WM_KEYDOWN);
keybd_event(13, 0, 0, 0);
}




Подскажите, как поставить задержку перед нажатием "ENTER", пробовал







Код:






Sleep




, но он ставит задержку на весь цикл ( ставил слееп в разных местах ) , спасибо за помощь

Dark_Knight
15.09.2017, 22:36
Слип в плагинах юзать нельзя. Это вызывает зависание самой игры. Так что ты дслелал ***ню.

Matthew3321AS
15.09.2017, 23:02
Слип в плагинах юзать нельзя. Это вызывает зависание самой игры. Так что ты дслелал ***ню.


Понимаю, поэтому и обратился сюда, прошу помощи, спрашиваю, как сделать по - другому

Dark_Knight
16.09.2017, 02:04
Понимаю, поэтому и обратился сюда, прошу помощи, спрашиваю, как сделать по - другому


Через GetTickCount()

stfbee22
16.09.2017, 02:10
Ребят, а по какому принципу можно привязать sf plugin к ПК?

Может есть какой нибудь гайд об этом?

Спасибо

Vandal™
16.09.2017, 13:24
Где найти больше информации по параметрам bitStream'a?

SAMP RPCS © MazaHACKa (https://docs.google.com/spreadsheets/d/1iIxEk7yR8r7ZLGiSAL4ndtz_N1k0p3Wt7TE5bei6ztU/edit#gid=1) (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2 QvMWlJeEVrN3lSOHI3WkxHaVNBTDRuZHR6X04xazBwM1d0N1RF NWJlaTZ6dFUvZWRpdCNnaWQ9MQ)

В этой таблице не везде описано. А методом тыка лень искать

BlackKnigga
16.09.2017, 13:30
Где найти больше информации по параметрам bitStream'a?
SAMP RPCS © MazaHACKa (https://docs.google.com/spreadsheets/d/1iIxEk7yR8r7ZLGiSAL4ndtz_N1k0p3Wt7TE5bei6ztU/edit#gid=1) (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2 QvMWlJeEVrN3lSOHI3WkxHaVNBTDRuZHR6X04xazBwM1d0N1RF NWJlaTZ6dFUvZWRpdCNnaWQ9MQ)
В этой таблице не везде описано. А методом тыка лень искать


samp.lua

Vandal™
16.09.2017, 14:46
samp.lua


Благодарю. Нашел много полезного :3

DarkP1xel
18.09.2017, 00:58
пробовал кто-то юзать imgui не в sf?


Ну

DarkP1xel
18.09.2017, 01:42
го тутор
а вообще как его можно влепить в asi-проект?


Хукаешь DirectX и инициализируешь.

Matthew3321AS
20.09.2017, 21:33
Где нужно объявить массив id

Код:






SF->getSAMP()->getInfo()->pPools->pText3D->textLabel[id].pText;

return
21.09.2017, 04:45
Где нужно объявить массив id

Код:






SF->getSAMP()->getInfo()->pPools->pText3D->textLabel[id].pText;






C++:






for
(
int
i
=
0
;
i

getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pText3D
->
iIsListed
[
i
]
!=
1
)
continue
;
/* делаешь то что тебе надо */
// SF->getSAMP()->getInfo()->pPools->pText3D->textLabel[i].pText;
}

Matthew3321AS
21.09.2017, 17:07
C++:






for
(
int
i
=
0
;
i

getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pText3D
->
iIsListed
[
i
]
!=
1
)
continue
;
/* делаешь то что тебе надо */
// SF->getSAMP()->getInfo()->pPools->pText3D->textLabel[i].pText;
}





Спасибо!

Karbun
21.09.2017, 19:16
Как сделать проверку, находится ли актер в определенных координатах?

DarkP1xel
21.09.2017, 19:54
Как сделать проверку, находится ли актер в определенных координатах?


Получаешь координаты CPed'a и ставишь условный оператор.

Сэнд
21.09.2017, 20:33
Как сделать проверку, находится ли актер в определенных координатах?



C++:






DWORD
*
loc
=
(
DWORD
*
)
(
(
*
CPed
)
+
0x14
)
;




а потом:

C++:






float
*
x
=
(
float
*
)
(
(
*
loc
)
+
0x30
)
;
float
*
y
=
(
float
*
)
(
(
*
loc
)
+
0x34
)
;
float
*
z
=
(
float
*
)
(
(
*
loc
)
+
0x38
)
;




и проверяешь:

C++:






if
(
/* сравниваешь */
)
{
// действие
}






Получаешь координаты CPed'a и ставишь условный оператор.


можно такое провернуть с радиусом?

memir
24.09.2017, 16:49
Как добавить свою надпись в инфобар собейта?

MISTER_GONWIK
25.09.2017, 07:37
можно такое провернуть с радиусом?



да

MISTER_GONWIK
25.09.2017, 11:57
спс большое


напиши мне в вк

LUCHARE
27.09.2017, 10:35
Шо делать если визуалка начала выебыватся на заголовочные файлы?

Код:






#include
#include
#include

DarkP1xel
27.09.2017, 12:48
Windows SDK установить.

LUCHARE
27.09.2017, 14:16
После повторного открытия решения выдает ошибку

"Не удалось загрузить проект SFPlugin, так как для него отсутствуют компоненты установки. Чтобы это исправить, запустите программу установки Visual Studio со следующими выбранными элементами: Microsoft.VisualStudio.ComponentGroup.NativeDeskto p.WinXP"

https://i.imgur.com/IHPZZZJ.png

Уже решил проблему

https://imgur.com/IHPZZZJ

Apolo11
29.09.2017, 20:02
Почему при использовании функции GTAfunc_IsLineOfSightClear моргают обьекты?

blood
30.09.2017, 01:22
Знаю вопрос ебанутый

решил создать проект, вроде все работает, но все равно выдает значение 0, когда файл существует.

PHP:





[CODE]
#include "stdafx.h"
#include
#include
using
namespace
std
;
int
main
(
)
{
std
:
:
ifstream file
;
file
.
open
(
"test.txt"
)
;
if
(
file
)
{
cout

itsLegend
30.09.2017, 01:34
Знаю вопрос ебанутый
решил создать проект, вроде все работает, но все равно выдает значение 0, когда файл существует.


Попробуй ./test.txt

blood
30.09.2017, 14:09
Попробуй ./test.txt


тоже самое

memir
30.09.2017, 21:32
тоже самое


Ты без точки написал ведь, да?

blood
01.10.2017, 01:37
Ты без точки написал ведь, да?


+

Dark_Knight
01.10.2017, 02:24
+


Укажи тип открытия через std::iobase и проверяй через метод is_open()

MISTER_GONWIK
01.10.2017, 10:23
тоже самое


закинь файл в ту же папку, где лежит и сам .exe

Apolo11
03.10.2017, 23:22
1.Как редактировать готовый(скаченный) .sf скрипт


Если ты задаешь подобные вопросы, то в твоем случае никак.

Vandal™
08.10.2017, 16:20
forEachPlayerOnScreen - в луа,

00C2: sphere_onscreen 3@ 4@ 5@ radius 4.0 - в cleo

Какая подобная функция в SF?

P.S Функция выполняет проверку наличия координаты в зоне видимости игрока

BlackKnigga
08.10.2017, 17:55
forEachPlayerOnScreen - в луа,
00C2: sphere_onscreen 3@ 4@ 5@ radius 4.0 - в cleo

Какая подобная функция в SF?

P.S Функция выполняет проверку наличия координаты в зоне видимости игрока


IsLineOfSightClear, например

Vandal™
08.10.2017, 18:05
IsLineOfSightClear, например


Для меня следующий код проще оказался.

bool OnScreen(CVector vect)

{

SF->getCLEO()->callOpcode("00C2: %f %f %f 0.0", vect.fX, vect.fY, vect.fZ);

return SF->getCLEO()->GetCondResult();

}

Спасибо и тебе, и Dark_Knight

MISTER_GONWIK
08.10.2017, 18:27
Для меня следующий код проще оказался.
bool OnScreen(CVector vect)
{
SF->getCLEO()->callOpcode("00C2: %f %f %f 0.0", vect.fX, vect.fY, vect.fZ);
return SF->getCLEO()->GetCondResult();
}
Спасибо и тебе, и Dark_Knight


ща бы в С++ вызывать опкоды клео, калкор №2

Dark_Knight
08.10.2017, 19:14
ща бы в С++ вызывать опкоды клео, калкор №2


Дай альтернативу.

Revalto
10.10.2017, 21:05
Почему не определяет?




https://forum.antichat.xyz/attachments/27161823/

BlackKnigga
10.10.2017, 21:19
Почему не определяет?








Потому что этих функций нет в сф апи. Ищи в собейте

Revalto
10.10.2017, 22:36
Подскажите пожалуйста, почему не хочется собираться imGUI от Dark'a?




https://forum.antichat.xyz/attachments/27161833/

memir
10.10.2017, 22:43
Подскажите пожалуйста, почему не хочется собираться imGUI от Dark'a?







Проект - свойства - набор инструментов платформы, выбирай там какой есть

Revalto
11.10.2017, 21:46
Проект - свойства - набор инструментов платформы, выбирай там какой есть


Не помогло

SR_team
11.10.2017, 21:52
Дай альтернативу.


typedef const unsigned CU;

CU IS_SPHERE_VISIBLE_FUNC = 0x420D40;

bool isSphereVisible(RwV3D pos, float range)

{

typedef bool (__thiscall *CCamera__isSphereVisible)(void* _this, RwV3D *pos, float radius);

return (CCamera__isSphereVisible(IS_SPHERE_VISIBLE_FUNC)) ((void*)*(uint32_t*)0xB6F028, &pos, range);

}

P.S. RwV3D такой же как CVector

Jack_Savage
14.10.2017, 21:53
Пытался сделать dff viewer знаю что есть но все равно хочется написать...

Нашел библиотеку librw (GitHub - aap/librw: A (partial) re-implementation of RenderWare Graphics(https://github.com/aap/librw) (https://github.com/aap/librw)) и через это чудо рендерил dff модельку.

Если попытаться рендерить модель из gta3.img то будет вот что то такое:

https://i.imgur.com/zf3MUx8.png

Хотя там должна быть дорога.

Может кто знает в чем трабл ?

PS: Если прогнать модель (импортировать ее туда и сразу экспортировать назад с заменой файла. Нечего даже не меняю.) через zmodeler или blender то будет работать как надо.

Помогите если кто знает в чем проблема.

samp is meme
15.10.2017, 18:08
в переменную записана строка Имя: Nick_Name

Как из строки достать Nick_Name ?

BlackKnigga
15.10.2017, 18:22
в переменную записана строка Имя: Nick_Name
Как из строки достать Nick_Name ?


sscanf, regex

blood
16.10.2017, 20:53
парни, может кто помочь маленький код AHK перевести на С++

Karbun
16.10.2017, 21:15
Как правильно использовать цикл do..while? После использование ГТА зависает и крашится.

BlackKnigga
16.10.2017, 21:16
Как правильно использовать цикл do..while? После использование ГТА зависает и крашится.


Как юзаешь?

Karbun
16.10.2017, 21:22
Как юзаешь?



C++:






do
{
coords
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Следующее действие"
)
;
}
while
(
true
)
;




Может надо задержку добавить?

BlackKnigga
16.10.2017, 21:26
C++:






do
{
coords
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Следующее действие"
)
;
}
while
(
true
)
;




Может надо задержку добавить?


В mainloop делаешь? Он сам по себе цикл и в нем нельзя использовать циклы и задержки.

И чо это такое ваще?



coords;

Karbun
16.10.2017, 21:28
В mainloop делаешь? Он сам по себе цикл и в нем нельзя использовать циклы и задержки.
И чо это такое ваще?


Не в mainloop, в функции. coords - это еще одна функция, которая обновляет координаты, к ней идет запрос, она возвращает координаты.

C++:






float
coords
(
)
{
float
fPos
[
3
]
=
{
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
}
;
return
(
fPos
[
0
]
,
fPos
[
1
]
,
fPos
[
2
]
)
;
}

BlackKnigga
16.10.2017, 21:29
Не в mainloop, в функции. coords - это еще одна функция, которая обновляет координаты, к ней идет запрос, она возвращает координаты.


Тогда давай весь код

Karbun
16.10.2017, 21:36
Тогда давай весь код


Он вродe и так вecь здeсь

C++:






#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
float
coords
(
)
{
float
fPos
[
3
]
=
{
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
}
;
return
(
fPos
[
0
]
,
fPos
[
1
]
,
fPos
[
2
]
)
;
}
void
script
(
void
)
float
fPos
[
3
]
;
do
{
coords
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Следующее действие"
)
;
}
while
(
true
)
;
void
CALLBACK
fld
(
std
::
string str
)
{
script
(
)
;
}
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"fld"
,
fld
)
;
init
=
true
;
}
}

BlackKnigga
16.10.2017, 21:44
Он вродe и так вecь здeсь

C++:






#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
float
coords
(
)
{
float
fPos
[
3
]
=
{
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
}
;
return
(
fPos
[
0
]
,
fPos
[
1
]
,
fPos
[
2
]
)
;
}
void
script
(
void
)
float
fPos
[
3
]
;
do
{
coords
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Следующее действие"
)
;
}
while
(
true
)
;
void
CALLBACK
fld
(
std
::
string str
)
{
script
(
)
;
}
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"SAMPFUNCS Plugin loaded."
)
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"fld"
,
fld
)
;
init
=
true
;
}
}





Херню какую то написал. Как это скомпилировалось вообще?

void script(void) - где открывающая и закрывающая скобка?

coords; - вызывать надо так: coords();

Да и беск. цикл в теле функции тоже нельзя юзать

Что ты вообще сделать хочешь?

Karbun
16.10.2017, 21:47
Херню какую то написал. Как это скомпилировалось вообще?
void script(void) - где открывающая и закрывающая скобка?
coords; - вызывать надо так: coords();
Да и беск. цикл в теле функции тоже нельзя юзать
Что ты вообще сделать хочешь?


Хочу сделать чтобы в чат флудило координатами персонажа, поможешь с бесконечным циклом, если не сложно? Пока не разобрался куда его можно пихать, а куда нет.

BlackKnigga
16.10.2017, 21:49
Хочу сделать чтобы в чат флудило координатами персонажа, поможешь с бесконечным циклом, если не сложно? Пока не разобрался куда его можно пихать, а куда нет.


В mainloop получай координаты и пиши в чат. Не надо пихать кучу функций и циклов

Karbun
16.10.2017, 21:52
В mainloop получай координаты и пиши в чат. Не надо пихать кучу функций и циклов


Еще хотел по поводу GetTickCount спросить, я его правильно использую?

C++:






static
DWORD time
=
0
;
if
(
GetTickCount
(
)
-
time
>
1000
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Следующее действие"
)
;
}

memir
16.10.2017, 21:54
Еще хотел по поводу GetTickCount спросить, я его правильно использую?

C++:






static
DWORD time
=
0
;
if
(
GetTickCount
(
)
-
time
>
1000
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Следующее действие"
)
;
}





Не-а.

Код:






static DWORD time = GetTickCount();
if(GetTickCount - time getSAMP()->getChat()->AddChatMessage(-1, "Следующее действие");
}

BlackKnigga
16.10.2017, 21:56
Не-а.

Код:






static DWORD time = GetTickCount();
if(GetTickCount - time getSAMP()->getChat()->AddChatMessage(-1, "Следующее действие");
}





После срабатывания надо обновлять time, получать новый TickCount

C++:






static
DWORD time
=
GetTickCount
(
)
;
if
(
GetTickCount
(
)
-
time
>
100
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Следующее действие"
)
;
time
=
GetTickCount
(
)
;
}

Karbun
16.10.2017, 22:01
Извините за тупость, но еще один вопрос, как это закинуть в mainloop ( и надо ли вообще ), а после вызвать её из тела?

C++:






float
coords
(
)
{
float
fPos
[
3
]
=
{
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
}
;
return
(
fPos
[
0
]
,
fPos
[
1
]
,
fPos
[
2
]
)
;
}

Karbun
17.10.2017, 13:06
Up



Извините за тупость, но еще один вопрос, как это закинуть в mainloop ( и надо ли вообще ), а после вызвать её из тела?

C++:






float
coords
(
)
{
float
fPos
[
3
]
=
{
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
}
;
return
(
fPos
[
0
]
,
fPos
[
1
]
,
fPos
[
2
]
)
;
}

Dark_Knight
17.10.2017, 13:44
Не надо так. Юзай СVector и все.

Karbun
17.10.2017, 13:55
Не надо так. Юзай СVector и все.


Можешь код дать?

blood
17.10.2017, 17:54
Как сделать эмуляцию прокручивания колесика мышки вниз-вверх, после того когда была нажата кнопка


Парни, в инете вообще нету инфо мб все таки кто нибудь знает

Dark_Knight
17.10.2017, 18:16
SendMessage

blood
17.10.2017, 19:10
SendMessage


?

Dark_Knight
17.10.2017, 20:54
Иди учи основы для начала.

Vandal™
18.10.2017, 22:33
C++:






SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0xAF480
// даже представления не имею
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0x219E80
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0x219F88
// ...\GTA San Andreas User Files\SAMP\..?




На что указатели? И есть ли какая-нибудь тема с обозначениями этих указателей?

BlackKnigga
18.10.2017, 23:10
На что указатели?


1. Что то вроде IsDirectoryExists

2. Путь до чатлога(?)

3. Путь до папки SAMP в документах(?)

Все взято из сурсов Enhanced Chatlog от NarutoUA.



И есть ли какая-нибудь тема с обозначениями этих указателей?


Гугл, исходники собейта

NarutoUA
19.10.2017, 00:17
C++:






SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0xAF480
// даже представления не имею
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0x219E80
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0x219F88
// ...\GTA San Andreas User Files\SAMP\..?




На что указатели? И есть ли какая-нибудь тема с обозначениями этих указателей?


ебаать что за говнокод

Vandal™
19.10.2017, 23:52
ебаать что за говнокод


Вытащил отсюда ->

Вопрос - Не могу найти(https://blast.hk/threads/16044/#post-140745) (https://blast.hk/threads/16044/#post-140745)

Revalto
20.10.2017, 17:56
Кто может помочь?




https://forum.antichat.xyz/attachments/27162936/




Код:






bool CALLBACK testRPC(stRakNetHookParams *params) // определение callback-функции, которая будет вызвана, если от сервера был получен новый RPC.
{
if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowTextDraw)
{
WORD ID;
char text[256];

params->bitStream->ResetReadPointer();
params->bitStream->Read(ID);
params->bitStream->SetReadOffset(0xD8);
SF->getRakNet()->DecodeString(text, 256, params->bitStream);

if (_house == true)
{
SF->getSAMP()->getChat()->AddChatMessage(-1, "ID: %d | Text: %s", ID, text);
}
}

return true; // успешно завершаем обработку RPC.
};

blood
22.10.2017, 16:43
Тот же вопрос жму букву R, но буквы Q and E не срабатывают в игре

PHP:





[CODE]
#include "stdafx.h"
#include
#include
#include
using
namespace
std
;
wchar_t AdresZagolovkaOkna
[
500
]
=
L
"GTA:SA:MP"
;
HWND
DeskriptorOkna
;
LRESULT
CALLBACK
LLKeyProc
(
int nCode
,
WPARAM
wParam
,
LPARAM
lParam
)
{
if
(
nCode
==
HC_ACTION
)
{
DWORD
vk
=
(
(
LPKBDLLHOOKSTRUCT
)
lParam
)
-
>
vkCode
;
if
(
vk
==
0x52
&&
DeskriptorOkna
)
{
SendMessage
(
DeskriptorOkna
,
WM_KEYDOWN
,
0x45
,
0
)
;
SendMessage
(
DeskriptorOkna
,
WM_KEYDOWN
,
0x51
,
0
)
;
}
}
return
CallNextHookEx
(
NULL
,
nCode
,
wParam
,
lParam
)
;
}
int
main
(
)
{
cout

Vandal™
22.10.2017, 23:56
Кто может помочь?






Код:






bool CALLBACK testRPC(stRakNetHookParams *params) // определение callback-функции, которая будет вызвана, если от сервера был получен новый RPC.
{
if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowTextDraw)
{
WORD ID;
char text[256];

params->bitStream->ResetReadPointer();
params->bitStream->Read(ID);
params->bitStream->SetReadOffset(0xD8);
SF->getRakNet()->DecodeString(text, 256, params->bitStream);

if (_house == true)
{
SF->getSAMP()->getChat()->AddChatMessage(-1, "ID: %d | Text: %s", ID, text);
}
}

return true; // успешно завершаем обработку RPC.
};






P.S у меня на switch(params->packetId)

C++:






case
ScriptRPCEnumeration
::
RPC_ScrShowTextDraw
:
{
stTextDrawTransmit TXD
;
WORD TID
,
TLen
;
char
Text
[
1024
]
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
TID
)
;
params
->
bitStream
->
Read
(
(
PCHAR
)
&
TXD
,
sizeof
(
stTextDrawTransmit
)
)
;
// struct
params
->
bitStream
->
Read
(
TLen
)
;
params
->
bitStream
->
Read
(
Text
,
TLen
)
;
Text
[
TLen
]
=
'\0'
;
// переводы из ARGB to RGBA. Можешь вырезать, если не нужно
TXD
.
dwLetterColor
=
D3DCOLOR_ARGB
(
LOBYTE
(
(
TXD
.
dwLetterColor
)
>>
8
)
,
LOBYTE
(
(
TXD
.
dwLetterColor
)
>>
16
)
,
LOBYTE
(
(
TXD
.
dwLetterColor
)
>>
24
)
,
LOBYTE
(
TXD
.
dwLetterColor
)
)
;
TXD
.
dwBackgroundColor
=
D3DCOLOR_ARGB
(
LOBYTE
(
(
TXD
.
dwBackgroundColor
)
>>
8
)
,
LOBYTE
(
(
TXD
.
dwBackgroundColor
)
>>
16
)
,
LOBYTE
(
(
TXD
.
dwBackgroundColor
)
>>
24
)
,
LOBYTE
(
TXD
.
dwBackgroundColor
)
)
;
TXD
.
dwBoxColor
=
D3DCOLOR_ARGB
(
LOBYTE
(
(
TXD
.
dwBoxColor
)
>>
8
)
,
LOBYTE
(
(
TXD
.
dwBoxColor
)
>>
16
)
,
LOBYTE
(
(
TXD
.
dwBoxColor
)
>>
24
)
,
LOBYTE
(
TXD
.
dwBoxColor
)
)
;
/*
-- your code --
*/
break
;
}

Vandal™
23.10.2017, 00:06
SF->getSAMP()->getSAMPAddr() + 0x219F88 >> Путь до папки SAMP в документах.

А как найти путь до корневой папки GTA SA с игрой?

Dark_Knight
23.10.2017, 11:55
Код:





[CODE]
#include
namespace fs = std::experimental::filesystem;
fs::path path = fs::current_path();
std::string PathToSa = path.string();
std::cout

Scr1m
23.10.2017, 23:26
Как сделать окно с сампом активным после того как его свернуть? Чтобы допустим диалоговые окна листались? Не откажусь от кусочка кода :)

Revalto
24.10.2017, 17:06
Как проверить ли персанаж заспавнился?

Woofing Giraffe
24.10.2017, 17:15
Как проверить ли персанаж заспавнился?


RPC_Spawn хукай

Revalto
24.10.2017, 18:53
Почему не срабатывает?

Код:






if (SF->getSAMP()->getDialog()->iIsActive == 1)
{
SF->getSAMP()->getChat()->AddChatMessage(-1, "{FF0011}[DIALOG]: {FFFFFF}Диалог найден!");
}

kawa operand
24.10.2017, 18:54
Почему не срабатывает?

Код:






if (SF->getSAMP()->getDialog()->iIsActive == 1)
{
SF->getSAMP()->getChat()->AddChatMessage(-1, "{FF0011}[DIALOG]: {FFFFFF}Диалог найден!");
}





весь код дай

Woofing Giraffe
24.10.2017, 19:36
Почему не срабатывает?

Код:






if (SF->getSAMP()->getDialog()->iIsActive == 1)
{
SF->getSAMP()->getChat()->AddChatMessage(-1, "{FF0011}[DIALOG]: {FFFFFF}Диалог найден!");
}





Может быть я ошибаюсь, но это будет работать только с локальными диалогами, не серверными

kawa operand
24.10.2017, 19:38
Может быть я ошибаюсь, но это будет работать только с локальными диалогами, не серверными


Так только с колбеком

BlackKnigga
24.10.2017, 19:40
Может быть я ошибаюсь, но это будет работать только с локальными диалогами, не серверными


С любым работает. Там true если любой диалог открыт

Revalto
24.10.2017, 20:13
С любым работает. Там true если любой диалог открыт



Код:






if (SF->getSAMP()->getDialog()->iIsActive == true)




Тоже не помогло...

BlackKnigga
24.10.2017, 20:14
Код:






if (SF->getSAMP()->getDialog()->iIsActive == true)




Тоже не помогло...


Код весь дай, сказали же

Revalto
24.10.2017, 20:15
Код весь дай, сказали же


Решил проблему!

Код:






if (SF->getSAMP()->getDialog()->iIsActive = true)

было

if (SF->getSAMP()->getDialog()->iIsActive == true)

kawa operand
24.10.2017, 20:20
Код:






bool CALLBACK ShowShowDialog(stRakNetHookParams *params) // определение callback-функции, которая будет вызвана, если от сервера был получен новый RPC.
{
if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowDialog)
{
WORD dialogId;
params->bitStream->Read(dialogId);
params->bitStream->ResetReadPointer();
if (SF->getSAMP()->getDialog()->iIsActive == true)
{
SF->getSAMP()->getChat()->AddChatMessage(-1, "{FF0011}[DIALOG]: {FFFFFF}Диалог найден!");
}
}
return true;
};





маин луп теперь

Revalto
24.10.2017, 20:24
маин луп теперь


Решил проблему!

Код:






if (SF->getSAMP()->getDialog()->iIsActive = true)

было

if (SF->getSAMP()->getDialog()->iIsActive == true)

kawa operand
24.10.2017, 20:30
Решил проблему!


Ты внутри хука эту проверку поставить не сможешь, код внутри хука выполняется до появления диалога

BlackKnigga
24.10.2017, 20:33
Решил проблему!


Для сравнения используется два знака равно ( == ), все было правильно.

Выше ответ почему не работало

Revalto
24.10.2017, 20:39
Для сравнения используется два знака равно ( == ), все было правильно.
Выше ответ почему не работало


А если еще сделать проверку по ID диалог, и там же сделать проверку ли он открыт, с =, то тупо будет открываться диалог... Как будто DialogHider залагал..

BlackKnigga
24.10.2017, 20:44
А если еще сделать проверку по ID диалог, и там же сделать проверку ли он открыт, с =, то тупо будет открываться диалог... Как будто DialogHider залагал..


Потому что пишешь единицу вместо сравнивания и диалог показывается.

Revalto
24.10.2017, 20:50
Потому что пишешь единицу вместо сравнивания и диалог показывается.


Если ставить "==" пишит:

Код:






1>main.cpp(26): warning C4805: ==: небезопасное смешение типа "int" и типа "bool" в операции







https://forum.antichat.xyz/attachments/27163481/




Делал проверку на этом TD...

Код:






bool CALLBACK ShowShowDialog(stRakNetHookParams *params) // определение callback-функции, которая будет вызвана, если от сервера был получен новый RPC.
{
if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowDialog)
{
WORD dialogId;
params->bitStream->ResetReadPointer();
params->bitStream->Read(dialogId);
params->bitStream->ResetReadPointer();
if (dialogId == 8868)
{
if (SF->getSAMP()->getDialog()->iIsActive == true)
{
SF->getSAMP()->getChat()->AddChatMessage(-1, "{FF0011}[DIALOG]: {FFFFFF}Диалог найден!");
SF->getSAMP()->getDialog()->SetInputText("Test");
}
}
}
return true;
};

void CALLBACK mainloop()
{
static bool init = false;
if (!init)
{
if (GAME == nullptr)
return;
if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
return;
if (!SF->getSAMP()->IsInitialized())
return;
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "{FFFF00}[test]: {FFFFFF}1");
SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHO OK_TYPE_INCOMING_RPC, ShowShowDialog);
init = true;
}
}

Revalto
24.10.2017, 20:53
Ты внутри хука эту проверку поставить не сможешь, код внутри хука выполняется до появления диалога


Сейчас проверю

Revalto
24.10.2017, 21:02
Ты внутри хука эту проверку поставить не сможешь, код внутри хука выполняется до появления диалога


С "==" не работает, а вот с "=" работает)

BlackKnigga
24.10.2017, 21:04
С "==" не работает, а вот с "=" работает)


:facepalm:

Это только ты думаешь что работает как надо, можешь вообще тогда условие убрать и ничего не изменится. Совсем

memir
24.10.2017, 21:05
С "==" не работает, а вот с "=" работает)


ты вместо сравнения присваиваешь переменной значение

kawa operand
24.10.2017, 21:05
С "==" не работает, а вот с "=" работает)


"==" оператор сравнения, "=" присвоения. А работает потому, что оператор "=" вернул true

Советую тебе сначала изучить структуру stDialogInfo, да и синтаксис с++ в целом.

Revalto
24.10.2017, 21:07
:facepalm:
Это только ты думаешь что работает как надо, можешь вообще тогда условие убрать и ничего не изменится. Совсем


Я не правильно написал, работает не коректно! Тоесть вообще капец творится :D

Так что мне делать, как мне проверить тогда открытыт ли диалог? С == 1 и == true не работает

kawa operand
24.10.2017, 21:10
Я не правильно написал, работает не коректно! Тоесть вообще капец творится :D
Так что мне делать, как мне проверить тогда открытыт ли диалог? С == 1 и == true не работает





Ты внутри хука эту проверку поставить не сможешь, код внутри хука выполняется до появления диалога

Scr1m
24.10.2017, 21:16
Я не правильно написал, работает не коректно! Тоесть вообще капец творится :D
Так что мне делать, как мне проверить тогда открытыт ли диалог? С == 1 и == true не работает


int &iDialogStatus = SF->getSAMP()->getDialog()->iIsActive;

if (iDialogStatus) // если открыт

{

// code

}

else // если закрыт

{

// code

}

return
25.10.2017, 13:39
на вики есть пример как использовать эту функцию

tutorials - api_lesson_dialog_hider | BlastHack — DEV_WIKI(https://blast.hk/wiki/tutorials:api_lesson_dialog_hider) (https://blast.hk/wiki/tutorials:api_lesson_dialog_hider)

Shock1
25.10.2017, 18:53
Возможно ли сделать привязку к серийному номеру жёсткого диска?Если - да,то можете дать ссылку на тему или как-нибудь пояснить,как сделать?)

samp is meme
25.10.2017, 19:46
поч гетлайн не хочет читать инт с файла? С чаром все норм

https://forum.antichat.xyz/attachments/27163578/

Dark_Knight
25.10.2017, 19:49
потому что надо преобразование делать.

jenekbueno
26.10.2017, 13:40
Здравствуйте товарищи, как в сф апи проверить существует ли игрок в зоне стрима?

как это в клео делалось например, относительно недавно начал увлекаться с++, поэтому еще не сильно прошарился

kawa operand
26.10.2017, 15:06
Здравствуйте товарищи, как в сф апи проверить существует ли игрок в зоне стрима?
как это в клео делалось например, относительно недавно начал увлекаться с++, поэтому еще не сильно прошарился


Можешь пробежаться по id, конвертируя их в CPed, если он нулб то не в стриме, ну или эмулятором опкодов

kawa operand
26.10.2017, 15:14
или вот

SF->getSAMP()->getPlayers()->IsPlayerDefined();

blood
29.10.2017, 13:24
Как узнать убил ли я игрока или нет

Dark_Knight
29.10.2017, 19:39
ScrDeathMessage как вариант.

BABLIK
01.11.2017, 08:59
Из-за чего может не появляться диалог с авторизацией на Diamond в RakSamp? Как такое фиксить?

Connect к серверу нормальный вроде как

Код:






[07:04:59.059] Connected. Joining the game...
[07:04:59.150] [AUDIO_STREAM] http://files.diamondrp.ru/helloween.mp3
[07:04:59.151] Connected to Diamond Role Play | Amber




Если вызывать sampRequestClass, то вообще кикает

kawa operand
01.11.2017, 09:59
ScrDeathMessage как вариант.


оно не работает без килл листа

BABLIK
02.11.2017, 10:39
Из-за чего может не появляться диалог с авторизацией на Diamond в RakSamp? Как такое фиксить?

Connect к серверу нормальный вроде как

Код:






[07:04:59.059] Connected. Joining the game...
[07:04:59.150] [AUDIO_STREAM] http://files.diamondrp.ru/helloween.mp3
[07:04:59.151] Connected to Diamond Role Play | Amber




Если вызывать sampRequestClass, то вообще кикает



Понял как фиксануть...

kawa operand
02.11.2017, 13:19
Понял как фиксануть...


Ну так поделись же своим бесценным опытом, чтобы таких вопросов больше не было ;D

Vandal™
02.11.2017, 19:56
https://image.prntscr.com/image/jy5eevx1RjyHQ8_uZGkW3A.png

Это на какой штуке замутили? название GUI

MISTER_GONWIK
02.11.2017, 20:32
https://image.prntscr.com/image/jy5eevx1RjyHQ8_uZGkW3A.png

Это на какой штуке замутили? название GUI


Самодельное

Vandal™
02.11.2017, 20:33
Самодельное


Есть в открытом доступе? Или функции SF?

MISTER_GONWIK
02.11.2017, 22:04
Есть в открытом доступе? Или функции SF?


нет

kawa operand
03.11.2017, 09:41
На просторах тырынета нашел пакер могайки, решил изучить, но так и не понял зачем там



C++:






char
pStartData
[
]
=
{
0x02
,
0x00
,
0x01
}
;
char
pPackData
[
]
=
{
0xC6
,
0x0A
,
0x01
,
0xF9
,
0xFF
,
0xFF
,
0xFF
,
0x03
,
0x00
,
0x00
,
0x06
,
0x00
,
0x03
,
0x01
,
0x00
,
0x01
}
;
char
pPackData2
[
]
=
{
0x06
,
0x00
,
0x03
,
0x02
,
0x00
,
0x04
,
0x00
,
0x85
,
0x00
,
0x03
,
0x05
,
0x00
,
0x03
,
0x00
,
0x00
,
0x0E
,
0x00
,
0x03
,
0x05
,
0x00
,
0x04
,
0x07
,
0x2D
,
0x80
,
0x03
,
0x02
,
0x00
,
0x03
,
0x01
,
0x00
,
0x4D
,
0x00
,
0x01
}
;
char
pPackData3
[
]
=
{
0x8D
,
0x0A
,
0x03
,
0x00
,
0x00
,
0x04
,
0x01
,
0x04
,
0x01
,
0x03
,
0x03
,
0x00
,
0x12
,
0x0B
,
0x03
,
0x03
,
0x00
,
0x04
}
;
char
pPackData4
[
]
=
{
0x03
,
0x04
,
0x00
,
0x00
,
0x00
,
0x8C
,
0x0A
,
0x03
,
0x05
,
0x00
,
0x04
,
0x01
,
0x03
,
0x04
,
0x00
,
0x04
,
0x01
,
0x0A
,
0x00
,
0x03
,
0x00
,
0x00
,
0x04
,
0x01
,
0x0A
,
0x00
,
0x03
,
0x02
,
0x00
,
0x04
,
0x01
,
0x0A
,
0x00
,
0x03
,
0x05
,
0x00
,
0x04
,
0x01
,
0x02
,
0x00
,
0x01
}
;
char
pPackData5
[
]
=
{
0x9F
,
0x0A
,
0x03
,
0x00
,
0x00
,
0x8E
,
0x0A
,
0x03
,
0x00
,
0x00
,
0x04
,
0x10
,
0x03
,
0x01
,
0x00
,
0x8D
,
0x0A
,
0x03
,
0x01
,
0x00
,
0x04
,
0x04
,
0x04
,
0x01
,
0x03
,
0x02
,
0x00
,
0x0A
,
0x00
,
0x03
,
0x01
,
0x00
,
0x04
,
0x04
,
0x8C
,
0x0A
,
0x03
,
0x01
,
0x00
,
0x04
,
0x04
,
0x03
,
0x02
,
0x00
,
0x04
,
0x01
}
;










C++:





[CODE]
#include
#include
#include
#include
void
error
(
char
*
t
)
{
std
::
cout

&
v
,
void
*
memptr
,
size_t size
)
{
for
(
size_t i
=
0
;
i

&
vec
,
char
*
fname
)
{
std
::
ifstream
f
(
fname
,
std
::
ios
::
binary
)
;
while
(
!
f
.
eof
(
)
)
vec
.
push_back
(
f
.
get
(
)
)
;
vec
.
pop_back
(
)
;
f
.
close
(
)
;
}
void
savefl
(
std
::
vector

&
vec
,
char
*
fname
)
{
std
::
ofstream
f
(
fname
,
std
::
ios
::
binary
)
;
for
(
unsigned
int
i
=
0
;
i

&
vecdata
,
std
::
vector

&
vecresult
)
{
int
fsize
=
vecdata
.
size
(
)
;
unsigned
char
xorvalue
=
(
random
(
)
%
12
+
2
)
*
16
+
random
(
)
%
12
+
2
;
int
jumpaddr
=
-
(
fsize
+
7
)
;
pushar
(
vecresult
,
pStartData
,
sizeof
(
pStartData
)
)
;
pushar
(
vecresult
,
&
jumpaddr
,
sizeof
(
jumpaddr
)
)
;
for
(
unsigned
int
i
=
0
;
i
>
cnt
;
}
std
::
vector

vecdata
;
std
::
vector

vecresult
;
loadfl
(
vecresult
,
args
[
1
]
)
;
if
(
!
vecresult
.
size
(
)
)
error
(
"empty file or cannot open file"
)
;
for
(
int
i
=
0
;
i

SR_team
03.11.2017, 10:38
На просторах тырынета нашел пакер могайки, решил изучить, но так и не понял зачем там


Это куски клео скрипта

Vandal™
03.11.2017, 18:53
Есть какая-нибудь проверка на то, что игрок в афк? Именно локальный игрок, что бы не выполнялись функции при выходе с АФК

BlackKnigga
03.11.2017, 19:05
Есть какая-нибудь проверка на то, что игрок в афк? Именно локальный игрок, что бы не выполнялись функции при выходе с АФК


GAME->IsPaused() пойдет?

Vandal™
03.11.2017, 19:19
GAME->IsPaused() пойдет?


Попробую, если че отпишу

kawa operand
03.11.2017, 23:05
Как обозначить подстроки в строке разным цветом в функции ID3DXFont:: DrawTextA,

как это было в клео "{ffffff}Привет, {00cc00}Мир!". сукп все перерыл, а в собейте такое не используется

BlackKnigga
03.11.2017, 23:09
Как обозначить подстроки в строке разным цветом в функции ID3DXFont:: DrawTextA,
как это было в клео "{ffffff}Привет, {00cc00}Мир!". сукп все перерыл, а в собейте такое не используется


Он такое не умеет. Юзай CD3DFont из соба, но он вроде не умеет в сложные шрифты.

NarutoUA
03.11.2017, 23:13
Как обозначить подстроки в строке разным цветом в функции ID3DXFont:: DrawTextA,
как это было в клео "{ffffff}Привет, {00cc00}Мир!". сукп все перерыл, а в собейте такое не используется


надо брать указатель на шрифт из структур сампа (stFontRenderer вроде), там модифицированный ID3DXFont который как раз атки и умеет в эти цветотэги

Vandal™
07.11.2017, 20:30
У кого есть функция stristr ? Проще говоря, strstr без учета регистра.

Есть такая хрень, но она чет не работает))

C++:






using
namespace
std
;
using
std
::
string
;
const
char
*
stristr
(
const
char
*
s1
,
const
char
*
s2
)
{
string ss1
=
_tolower
(
s1
)
;
string ss2
=
_tolower
(
s2
)
;
const
string
::
size_type index
=
ss1
.
find
(
ss2
)
;
if
(
index
==
string
::
npos
)
{
return
NULL
;
}
return
&
s1
[
index
]
;
}

SR_team
07.11.2017, 20:41
У кого есть функция stristr ? Проще говоря, strstr без учета регистра.

Есть такая хрень, но она чет не работает))

C++:






using
namespace
std
;
using
std
::
string
;
const
char
*
stristr
(
const
char
*
s1
,
const
char
*
s2
)
{
string ss1
=
_tolower
(
s1
)
;
string ss2
=
_tolower
(
s2
)
;
const
string
::
size_type index
=
ss1
.
find
(
ss2
)
;
if
(
index
==
string
::
npos
)
{
return
NULL
;
}
return
&
s1
[
index
]
;
}





Исходник - SRString(https://blast.hk/threads/18698/) (https://blast.hk/threads/18698/)

C++:






int
stristr
(
SRString one
,
SRString two
)
{
return
one
.
toLower
(
)
.
indexOf
(
two
.
toLower
(
)
)
;
}

Dark_Knight
07.11.2017, 21:24
У кого есть функция stristr ? Проще говоря, strstr без учета регистра.



Код:





[CODE]
#include
#include
#include
#include
using namespace std;

void main() {
string str("HernYa"), str1("hernya");
transform(str.begin(), str.end(), str.begin(), tolower);
transform(str1.begin(), str1.end(), str1.begin(), tolower);
cout

Vandal™
08.11.2017, 17:35
Код:






#include
#include
#include
#include
using namespace std;

void main() {
string str("HernYa"), str1("hernya");
transform(str.begin(), str.end(), str.begin(), tolower);
transform(str1.begin(), str1.end(), str1.begin(), tolower);
cout

C++:





[CODE]
bool
stristr
(
std
::
string str
,
std
::
string str1
)
{
setlocale
(
LC_CTYPE
,
"Russian"
)
;
transform
(
str
.
begin
(
)
,
str
.
end
(
)
,
str
.
begin
(
)
,
tolower
)
;
transform
(
str1
.
begin
(
)
,
str1
.
end
(
)
,
str1
.
begin
(
)
,
tolower
)
;
return
strstr
(
str
.
c_str
(
)
,
str1
.
c_str
(
)
)
;
}




[QUOTE="SR_team"]

Исходник - SRString(https://blast.hk/threads/18698/) (https://blast.hk/threads/18698/)

C++:






int
stristr
(
SRString one
,
SRString two
)
{
return
one
.
toLower
(
)
.
indexOf
(
two
.
toLower
(
)
)
;
}





По мне, проще использовать то, что сверху, чем добавлять полный пак и не пользоваться им :)

Dark_Knight
08.11.2017, 20:29
Не первый раз уже выручаешь. Еще раз спасибо.

Чуток переделал код, что бы и русские символы в нижний регистр менялись.


Все и так меняется)

Alfinity
10.11.2017, 21:45
Привет, ребята! Может ли кто-то рассказать как работать с камерой: установить позицию(включая направление "взгляда"), узнать позицию(включая направление "взгляда") и т.п.?

Сэнд
10.11.2017, 23:03
0xB6F258 - направление по горизонтали

0xB6F248 - по вертикали

вроде бы в радианах, не помню

BABLIK
11.11.2017, 10:03
Как отловить исходящий RPC пакет от игрока в raksamp или собейте ? Мне нужно получить RPC_GiveTakeDamage

Dexide
11.11.2017, 14:28
Как исправить ошибку? Понимаю что файл не может открыться, но почему?

1>C:\Users\banmachine\Documents\Visual Studio 2015\Projects\sf_plug\SFPlugin\SFAPI\SAMPFUNCS_API .h(21): fatal error C1083: Не удается открыть файл включение: d3dx9.h: No such file or directory

Проблему врод исправил но появилась другая,

1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\hash_map(17): error C2338: is deprecated and will be REMOVED. Please use . You can define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS to acknowledge that you have received this warning.

1>main.cpp(18): warning C4477: "sscanf": в строке форматирования "%d" требуется аргумент типа "int *", но вариативный аргумент "1" имеет тип "int"

Код:






#include
#include
#include
#include

#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"

SAMPFUNCS *SF = new SAMPFUNCS();

int time = -1;

void CALLBACK Weather(std::string param)
{
char weatherstring[128];
if (param.empty())
return;
sscanf(param.c_str(), "%d", 0xC81320);
SF->Log("{00FF00}ID погоды был изменен на {FFFFFF}%s", param.c_str());
}

void CALLBACK Time(std::string param)
{
if (param.empty())
return;
time = std::stoi(param);
if (time > 23 || time Log("{FF0000}Значение должно быть не больше 23 и не мешьше 0.");
return;
}
else
{
SF->Log("{00FF00}Время было изменено на {FFFFFF}%d {00FF00}часов.", time);
}
}

void CALLBACK mainloop()
{
static bool init = false;
if (!init)
{
if (GAME == nullptr)
return;
if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
return;
if (!SF->getSAMP()->IsInitialized())
return;
SF->registerConsoleCommand("setweather", Weather);
SF->getSAMP()->registerChatCommand("setweather", Weather);
SF->registerConsoleCommand("settime", Time);
SF->getSAMP()->registerChatCommand("settime", Time);
init = true;
}

if (time > -1)
SF->getCLEO()->callOpcode("00C0: %d 0", time);
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
switch (dwReasonForCall)
{
case DLL_PROCESS_ATTACH:
SF->initPlugin(mainloop, hModule);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

LUCHARE
11.11.2017, 15:37
Проблему врод исправил но появилась другая,

1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\hash_map(17): error C2338: is deprecated and will be REMOVED. Please use . You can define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS to acknowledge that you have received this warning.
1>main.cpp(18): warning C4477: "sscanf": в строке форматирования "%d" требуется аргумент типа "int *", но вариативный аргумент "1" имеет тип "int"

Код:






#include
#include
#include
#include

#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"

SAMPFUNCS *SF = new SAMPFUNCS();

int time = -1;

void CALLBACK Weather(std::string param)
{
char weatherstring[128];
if (param.empty())
return;
sscanf(param.c_str(), "%d", 0xC81320);
SF->Log("{00FF00}ID погоды был изменен на {FFFFFF}%s", param.c_str());
}

void CALLBACK Time(std::string param)
{
if (param.empty())
return;
time = std::stoi(param);
if (time > 23 || time Log("{FF0000}Значение должно быть не больше 23 и не мешьше 0.");
return;
}
else
{
SF->Log("{00FF00}Время было изменено на {FFFFFF}%d {00FF00}часов.", time);
}
}

void CALLBACK mainloop()
{
static bool init = false;
if (!init)
{
if (GAME == nullptr)
return;
if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
return;
if (!SF->getSAMP()->IsInitialized())
return;
SF->registerConsoleCommand("setweather", Weather);
SF->getSAMP()->registerChatCommand("setweather", Weather);
SF->registerConsoleCommand("settime", Time);
SF->getSAMP()->registerChatCommand("settime", Time);
init = true;
}

if (time > -1)
SF->getCLEO()->callOpcode("00C0: %d 0", time);
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
switch (dwReasonForCall)
{
case DLL_PROCESS_ATTACH:
SF->initPlugin(mainloop, hModule);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}





#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1

Dexide
11.11.2017, 16:13
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1


не помогло

LUCHARE
11.11.2017, 16:16
sscanf(param.c_str(), "%d", 0xC81320);





1>main.cpp(18): warning C4477: "sscanf": в строке форматирования "%d" требуется аргумент типа "int *", но вариативный аргумент "1" имеет тип "int"

itsLegend
11.11.2017, 16:22
Как отловить исходящий RPC пакет от игрока в raksamp или собейте ? Мне нужно получить RPC_GiveTakeDamage


Так же как и остальные RPC. Для этого тебе этот RPC должен сначала придти.

BABLIK
11.11.2017, 16:39
Так же как и остальные RPC. Для этого тебе этот RPC должен сначала придти.


Он не вызывается у меня.. Возможно потому что этот RPC исходящий от игрока.. Он точно должен вызываться ?

itsLegend
11.11.2017, 16:49
Он не вызывается у меня.. Возможно потому что этот RPC исходящий от игрока.. Он точно должен вызываться ?


По-моему, приходит тогда, когда игрок наносит дамаг локальному игроку.

Dexide
11.11.2017, 16:51
Переустановил VS, теперь выдает 2996 ошибок с этим кодом...

kawa operand
11.11.2017, 16:53
не помогло


#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS



SF->getCLEO()->callOpcode("00C0: %d 0", time);


извращенец.

C++:






samp
=
(
int
)
GetModuleHandleA
(
"samp.dll"
)
;
int
stSAMP
=
*
(
int
*
)
(
samp
+
0x21A0F8
)
;
int
ServerPresets
=
*
(
int
*
)
(
stSAMP
+
0x3C5
)
;
*
(
unsigned
short
*
)
(
ServerPresets
+
44
)
=
hour
;






код не мой, взял для теста с бх, у меня даже стандартный проект сф не копмпилируется...


Скачай последнюю мсвс и в самое начало

C++:






#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS




(до инклудов, в main.cpp прям на первой строчке)



Можешь дать ссылку? Не понимаю что такое мсвс и куда его инсталлировать


Visual Studio IDE, редактор кода, Team Services и Mobile Center(https://www.visualstudio.com/ru/) (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudmlzdWFsc3R1ZGlvLmNvbS9ydS8)

Dexide
11.11.2017, 17:16
Visual Studio IDE, редактор кода, Team Services и Mobile Center(https://www.visualstudio.com/ru/) (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudmlzdWFsc3R1ZGlvLmNvbS9ydS8)


спасибо

kawa operand
11.11.2017, 17:42
а что именно качать? Чет я туплю сильно, как расшифровывается msvs?


microsoft visual studio

Dexide
11.11.2017, 17:48
microsoft visual studio


Я там и качал, выдавало 2996 ошибки, скачивал до этого 2015 было только 1-2 ошибки

kawa operand
11.11.2017, 17:50
Я там и качал, выдавало 2996 ошибки, скачивал до этого 2015 было только 1-2 ошибки


а directx sdk есть?

Dexide
11.11.2017, 19:01
а directx sdk есть?


Установил его, пофиксилась одна проблема (с подгрузкой d3d9.h), но дальше 17 строчек кода я не ушел, появились другие проблемы, психанул и установил 2017 vs появилось в том же коде 2996 ошибки, до этого в 2015 было только 2

kawa operand
11.11.2017, 19:10
Установил его, пофиксилась одна проблема (с подгрузкой d3d9.h), но дальше 17 строчек кода я не ушел, появились другие проблемы, психанул и установил 2017 vs появилось в том же коде 2996 ошибки, до этого в 2015 было только 2


Скачай 2015 и скинь мне эти 2 ошибки

только она весит дохера(

Vandal™
14.11.2017, 02:10
Все и так меняется)


без " setlocale(LC_CTYPE, "Russian"); " у меня менялись только английские символы, а русские оставались такими же.

CleanLegend
14.11.2017, 11:49
При активации краш, в чем ошибка ?

Код:






void test33()
{
paktags = (DWORD*)(SampDLL + SAMP_INFO_OFFSET);
paktags2 = (DWORD*)(paktags+ SAMP_SETTINGS);

ThroughWalls = (BYTE*)(*(DWORD*)(*paktags2 + SAMP_SETTINGS) + 0x2F);
DWORD OldProt;

VirtualProtect((LPVOID)ThroughWalls, 0x100, PAGE_EXECUTE_READWRITE, &OldProt);
*ThroughWalls = 1;
}

kawa operand
14.11.2017, 12:51
При активации краш, в чем ошибка ?

Код:






void test33()
{
paktags = (DWORD*)(SampDLL + SAMP_INFO_OFFSET);
paktags2 = (DWORD*)(paktags+ SAMP_SETTINGS);

ThroughWalls = (BYTE*)(*(DWORD*)(*paktags2 + SAMP_SETTINGS) + 0x2F);
DWORD OldProt;

VirtualProtect((LPVOID)ThroughWalls, 0x100, PAGE_EXECUTE_READWRITE, &OldProt);
*ThroughWalls = 1;
}





paktags = *(dword *)(samp + info_offset);



При активации краш, в чем ошибка ?

Код:






void test33()
{
paktags = (DWORD*)(SampDLL + SAMP_INFO_OFFSET);
paktags2 = (DWORD*)(paktags+ SAMP_SETTINGS);

ThroughWalls = (BYTE*)(*(DWORD*)(*paktags2 + SAMP_SETTINGS) + 0x2F);
DWORD OldProt;

VirtualProtect((LPVOID)ThroughWalls, 0x100, PAGE_EXECUTE_READWRITE, &OldProt);
*ThroughWalls = 1;
}





Советую погуглить правила наименований переменных и функций

CleanLegend
14.11.2017, 13:22
paktags = *(dword *)(samp + info_offset);


Проблема не в этом, еще будут варианты?

Dexide
16.11.2017, 14:25
как убрать переменную player id? нужно что-бы я писал /setskin idskin

Код:






void emulateRPC_setskin(uint32_t player_id, uint32_t skin_id)
{
BitStream bsClass;
bsClass.Write(uint32_t(player_id));
bsClass.Write(uint32_t(skin_id));
SF->getRakNet()->emulateRecvRPC(153, &bsClass);
}

BlackKnigga
16.11.2017, 14:40
как убрать переменную player id? нужно что-бы я писал /setskin idskin

Код:






void emulateRPC_setskin(uint32_t player_id, uint32_t skin_id)
{
BitStream bsClass;
bsClass.Write(uint32_t(player_id));
bsClass.Write(uint32_t(skin_id));
SF->getRakNet()->emulateRecvRPC(153, &bsClass);
}





Убери аргумент и пиши свой туда свой ид

ALF
16.11.2017, 15:17
@Dexide (https://www.blast.hk/members/53507/)

C++:






void
emulateRPC_SetSkin
(
uint32_t
skin_id
)
{
BitStream bsClass
;
bsClass
.
Write
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
sLocalPlayerID
)
;
bsClass
.
Write
(
skin_id
)
;
SF
->
getRakNet
(
)
->
emulateRecvRPC
(
RPC_ScrSetPlayerSkin
,
&
bsClass
)
;
}

CleanLegend
16.11.2017, 16:25
При рисовании чего либо на экран, после смерти крашит, в чем может быть ошибка?

kawa operand
16.11.2017, 16:29
При рисовании чего либо на экран, после смерти крашит, в чем может быть ошибка?


в коде

CleanLegend
16.11.2017, 16:40
в коде


ты уже второй бессмысленный совет даешь,смысл от твоих сообщений?

ALF
16.11.2017, 16:47
ты уже второй бессмысленный совет даешь,смысл от твоих сообщений?


Смысл от твоих вопрос если ты не прикрепляешь код к ним?

CleanLegend
16.11.2017, 16:56
Смысл от твоих вопрос если ты не прикрепляешь код к ним?



C++:






pRender
->
render_String
(
150
,
700
,
Color
(
255
,
0
,
255
,
0
)
,
DT_LEFT
|
DT_SHADOW
,
"X:%.2f Y:%.2f Z:%.2f"
,
GetPosX
(
)
,
GetPosY
(
)
,
GetPosZ
(
)
)
;




C++:






float
GetPosX
(
)
{
float
PlayerPosX
;
p1
=
*
(
DWORD
*
)
0xB6F5F0
+
0x14
;
p2
=
*
(
DWORD
*
)
p1
+
0x30
;
memcpy
(
&
PlayerPosX
,
(
void
*
)
p2
,
sizeof
(
PlayerPosX
)
)
;
return
PlayerPosX
;
}

BlackKnigga
16.11.2017, 18:10
C++:






pRender
->
render_String
(
150
,
700
,
Color
(
255
,
0
,
255
,
0
)
,
DT_LEFT
|
DT_SHADOW
,
"X:%.2f Y:%.2f Z:%.2f"
,
GetPosX
(
)
,
GetPosY
(
)
,
GetPosZ
(
)
)
;




C++:






float
GetPosX
(
)
{
float
PlayerPosX
;
p1
=
*
(
DWORD
*
)
0xB6F5F0
+
0x14
;
p2
=
*
(
DWORD
*
)
p1
+
0x30
;
memcpy
(
&
PlayerPosX
,
(
void
*
)
p2
,
sizeof
(
PlayerPosX
)
)
;
return
PlayerPosX
;
}





Перед чтением проверяй указатель на валидность.

SR_team
16.11.2017, 18:10
C++:






pRender
->
render_String
(
150
,
700
,
Color
(
255
,
0
,
255
,
0
)
,
DT_LEFT
|
DT_SHADOW
,
"X:%.2f Y:%.2f Z:%.2f"
,
GetPosX
(
)
,
GetPosY
(
)
,
GetPosZ
(
)
)
;




C++:






float
GetPosX
(
)
{
float
PlayerPosX
;
p1
=
*
(
DWORD
*
)
0xB6F5F0
+
0x14
;
p2
=
*
(
DWORD
*
)
p1
+
0x30
;
memcpy
(
&
PlayerPosX
,
(
void
*
)
p2
,
sizeof
(
PlayerPosX
)
)
;
return
PlayerPosX
;
}





Начни с lua. Ты не понимаешь, что делаешь

D3.Pheonix
16.11.2017, 19:29
Нарыл код от DK22Pac, плагин позволяет произвольно сменить место хранения папки GTA San Andreas User Files

Я в Ц++ не БУБУ, подскажите, как указывать путь. Полагаю это на 18 строке

C++:






#include "plugin.h"
#include
class
MyDocumentsDir
{
public
:
static
void
SetDocumentsDir
(
)
{
const
char
*
documentsDir
=
"D:\\My Documents\\Hello World - My GTA SA Documents"
;
std
::
experimental
::
filesystem
::
create_directories
(
documentsDir
)
;
strcpy
(
reinterpret_cast

(
0xC92368
)
,
documentsDir
)
;
}
MyDocumentsDir
(
)
{
// skip registry checks
plugin
::
patch
::
SetUInt
(
0x744FD1
,
0x9014C483
)
;
plugin
::
patch
::
Nop
(
0x744FD5
,
10
)
;
plugin
::
patch
::
SetUInt
(
0x745001
,
0x9018C483
)
;
plugin
::
patch
::
Nop
(
0x745005
,
10
)
;
plugin
::
patch
::
SetUInt
(
0x745018
,
0x9004C483
)
;
plugin
::
patch
::
Nop
(
0x74501C
,
16
)
;
// set documents path
plugin
::
patch
::
RedirectCall
(
0x74503E
,
SetDocumentsDir
)
;
plugin
::
patch
::
Nop
(
0x745048
,
2
)
;
}
}
myDocumentsDir
;

BlackKnigga
16.11.2017, 20:21
Нарыл код от DK22Pac, плагин позволяет произвольно сменить место хранения папки GTA San Andreas User Files
Я в Ц++ не БУБУ, подскажите, как указывать путь. Полагаю это на 18 строке

C++:






#include "plugin.h"
#include
class
MyDocumentsDir
{
public
:
static
void
SetDocumentsDir
(
)
{
const
char
*
documentsDir
=
"D:\\My Documents\\Hello World - My GTA SA Documents"
;
std
::
experimental
::
filesystem
::
create_directories
(
documentsDir
)
;
strcpy
(
reinterpret_cast

(
0xC92368
)
,
documentsDir
)
;
}
MyDocumentsDir
(
)
{
// skip registry checks
plugin
::
patch
::
SetUInt
(
0x744FD1
,
0x9014C483
)
;
plugin
::
patch
::
Nop
(
0x744FD5
,
10
)
;
plugin
::
patch
::
SetUInt
(
0x745001
,
0x9018C483
)
;
plugin
::
patch
::
Nop
(
0x745005
,
10
)
;
plugin
::
patch
::
SetUInt
(
0x745018
,
0x9004C483
)
;
plugin
::
patch
::
Nop
(
0x74501C
,
16
)
;
// set documents path
plugin
::
patch
::
RedirectCall
(
0x74503E
,
SetDocumentsDir
)
;
plugin
::
patch
::
Nop
(
0x745048
,
2
)
;
}
}
myDocumentsDir
;





Меняй путь на шестой строке на свой.

FYP
18.11.2017, 21:57
bsClass.Write(uint32_t(SF->getSAMP()->getPlayers()->sLocalPlayerID));

holmes0
22.11.2017, 01:44
Подскажите, как сделать дебаг сборки собейта, чтобы выяснить причину краша игры?

Без него игра нормально работает.

sаnеk
22.11.2017, 01:45
misc -> debug

Inf
22.11.2017, 07:02
traceLastFunc( "tut norm" );

Log( "poka norm" );

ishi
22.11.2017, 12:37
Как прочесть запись в реестре (строку) если пункт с ней не именован?

Везде где учат читать строки у них есть название, так что гугл не помог

Запись приклеил к посту