Просмотр полной версии : С/С++ Вопрос - Ответ
Dark_Knight
18.07.2017, 22:46
Ты через хук буллет даты можешь перезаписать входящие патроны и исходящие.
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.
Неправильно читаешь 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/
Как из DLL сделать ASI? Если просто переименовать - не работает. Писал на Visual C++. ASI loader стоит.
BlackKnigga
05.08.2017, 17:33
Как из DLL сделать ASI? Если просто переименовать - не работает. Писал на Visual C++. ASI loader стоит.
Другие аси грузит? Asi и dll это одно и то же
Другие аси грузит? Asi и dll это одно и то же
Другие АСИ грузит прекрасно.
iAmerican
05.08.2017, 19:11
Другие АСИ грузит прекрасно.
Код покажи.
Код покажи.
Если инжектить через 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, там есть приватные репозитории (бесплатно). Но если ты полный нуб то лучше тфс использовать, он интегрирован в студию и в гуи все нужные команды
ASI инжектится моментально , при запуске процесса(точно не знаю).
Так что добавляй цикл.
C++:
HWND hWnd
=
0
;
while
(
hWnd
==
0
)
{
hWnd
=
FindWindow
(
0
,
"GTA:SA:MP"
)
;
Sleep
(
100
)
;
}
Проблема в том, что я не могу добавить цикл, ибо с ним все зависает.
при компилировании возникла ошибка http://prntscr.com/g8smaj (https://www.blast.hk/redirect/aHR0cDovL3BybnRzY3IuY29tL2c4c21hag)
как фиксануть? где объявить эту переменную?
Возможно ли узнать скины других игроков через память игры?
DarkP1xel
17.08.2017, 14:18
Возможно ли узнать скины других игроков через память игры?
Возможно.
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 и там было точно не то что ты отправляешь
sync.sKeys = 131072;
2 байта - максимум 65535. В цикле лови пакет и выводи значение sKeys на экран, не двигаясь (что бы было 0) нажми 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)
На сколько я помню нажатие 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
)
;
}
Да, так и есть
Вот тебе функция:
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
так у тебя же там повторяется код, или это я слепой?
Все правильно, сначала отправляем зажатую клавишу, потом отжатую. Это надежнее чем простой спам пакетами
Все правильно, сначала отправляем зажатую клавишу, потом отжатую. Это надежнее чем простой спам пакетами
он сам отправит отжатую же. Ты ведь не держишь клавишу. И почему KeyId - int, если CurrentWeapon всего байт?
BlackKnigga
19.08.2017, 22:09
он сам отправит отжатую же. Ты ведь не держишь клавишу. И почему KeyId - int, если CurrentWeapon всего байт?
Заодно и убережет от зажатой клавишы тогда.
А по второму - функция не моя, нашел тут и скинул
как прочитать 99 строчку из чата?
itsLegend
20.08.2017, 15:50
как прочитать 99 строчку из чата?
Если строки чата хранятся в массиве, то наверно нужно прочитать массив по индексу 99.
Если строки чата хранятся в массиве, то наверно нужно прочитать массив по индексу 99.
есть где функи посмотреть?
itsLegend
20.08.2017, 15:56
есть где функи посмотреть?
Какие функи? Получаешь указатель на массив, читаешь его.
Как реализовать бесконечный цикл в DLL файле без остановки основной программы?
DarkP1xel
23.08.2017, 00:28
Как реализовать бесконечный цикл в DLL файле без остановки основной программы?
Создать поток.
1.Ваш вопрос: Ребят, хотел поинтересоваться. Вот у меня есть программа написанная вроде как на с++, предназначена для сампа. Одна из функций это считываение инфы с гугл таблицы и вывод в игру, типо проверка на ЧС. Только там уже устаревшая таблица привязана, возможно ли как нибудь отредактировать прогу?
randazzo
28.08.2017, 11:25
1.Ваш вопрос: Ребят, хотел поинтересоваться. Вот у меня есть программа написанная вроде как на с++, предназначена для сампа. Одна из функций это считываение инфы с гугл таблицы и вывод в игру, типо проверка на ЧС. Только там уже устаревшая таблица привязана, возможно ли как нибудь отредактировать прогу?
если исходника нет, то скорее всего нельзя
iAmerican
28.08.2017, 15:12
1.Ваш вопрос: Ребят, хотел поинтересоваться. Вот у меня есть программа написанная вроде как на с++, предназначена для сампа. Одна из функций это считываение инфы с гугл таблицы и вывод в игру, типо проверка на ЧС. Только там уже устаревшая таблица привязана, возможно ли как нибудь отредактировать прогу?
Вообще надо в таком случае прикладывать саму программу , раз такие вопросы задаешь. И я думаю она написана на AHK , а не на плюсах.
А с ахк дело уже намного проще.
Как сделать так, чтоб деструктор сам срабатывал после использования любого из элементов класса?
NarutoUA
29.08.2017, 12:06
что вы несете
Я читал что деструктор сам вызовется, если класс будет вызван в цикле и цикл прекратится, но мне стало интересно, можно ли сделать тоже самое, но без циклов, рекурсией там или ещё как
Может я несу бред, но я не знаю ответа и потому лишь строю догадки и задаю вопросы, разве это не логично?
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
Я читал что деструктор сам вызовется, если класс будет вызван в цикле и цикл прекратится, но мне стало интересно, можно ли сделать тоже самое, но без циклов, рекурсией там или ещё как
Может я несу бред, но я не знаю ответа и потому лишь строю догадки и задаю вопросы, разве это не логично?
Что значит "вызвать класс"?
Когда пытаюсь копмилировать проект, творится какая то хрень, открывается Msbuild, и начинает флудить каждые 3 минуты открывается новый вот скрин: Как исправить?
Версия visual studio 2013
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.
Парни, только начал учиться С++, помогите пожалуйста с кодом и укажите на ошибки. Плагин должен выводить в чат ники всех игроков на сервере:
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:
как сделать, чтобы показывало только тех, кто в стриме? вариант с удалением этого
Код:
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
(
)
;
}
Парни, только начал учиться С++, помогите пожалуйста с кодом и укажите на ошибки. Плагин должен выводить в чат ники всех игроков на сервере:
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 или что-то типа того должно быть
g_Players->pRemotePlayer->pPlayerData->pSAMP_Actor->pGTA_ped или что-то типа того должно быть
крашит
крашит
тогда не заменяй, а дополняй
тогда не заменяй, а дополняй
так я дополнил и крашит)
https://forum.antichat.xyz/attachments/27158975/
так я дополнил и крашит)
ты заменил, и на скрине пруф замены
так я дополнил и крашит)
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 условия
сработало, если разбить на 3 условия, но какая-то ***ня получается
Добавь проверку на существование игрока с id i на сервере.
Как её добавить? пробовал через g_Players (как у maks_fender), но у меня её даже нет.
Как её добавить? пробовал через g_Players (как у maks_fender), но у меня её даже нет.
C++:
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
i
]
)
{
.
.
.
}
Код:
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
Потому что надо документацию читать, блеать.
Потому что надо документацию читать, блеать.
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.
Как тогда достать все строки, которые в секции?
Ты уверен что в функцию можно передать стринг?
Ну, бля, конкретную строку в секции же читает.
Как тогда достать все строки, которые в секции?
Можно немного больше почитать насчёт типа, а не просто приводить к нему. 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)
Почему не выводятся ники игроков? Вроде всё верно написал: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
;
}
}
Почему не выводятся ники игроков? Вроде всё верно написал:mega_shok:
C++:
for
(
int
i
=
0
;
i
>
SAMP_MAX_PLAYERS
,
i
++
;
)
for (int i = 0; i
[QUOTE="2Shae"]
for (int i = 0; i
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
;
}
}
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
[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
;
}
}
Спасибо, теперь хотя бы что-то в чат выводит, однако не выводит ник и 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
)
;
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 к ПК?
Может есть какой нибудь гайд об этом?
Спасибо
Где найти больше информации по параметрам 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
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;
Где нужно объявить массив 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;
}
Спасибо!
Как сделать проверку, находится ли актер в определенных координатах?
DarkP1xel
21.09.2017, 19:54
Как сделать проверку, находится ли актер в определенных координатах?
Получаешь координаты CPed'a и ставишь условный оператор.
Как сделать проверку, находится ли актер в определенных координатах?
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 и ставишь условный оператор.
можно такое провернуть с радиусом?
Как добавить свою надпись в инфобар собейта?
MISTER_GONWIK
25.09.2017, 07:37
можно такое провернуть с радиусом?
да
MISTER_GONWIK
25.09.2017, 11:57
спс большое
напиши мне в вк
Шо делать если визуалка начала выебыватся на заголовочные файлы?
Код:
#include
#include
#include
DarkP1xel
27.09.2017, 12:48
Windows SDK установить.
После повторного открытия решения выдает ошибку
"Не удалось загрузить проект SFPlugin, так как для него отсутствуют компоненты установки. Чтобы это исправить, запустите программу установки Visual Studio со следующими выбранными элементами: Microsoft.VisualStudio.ComponentGroup.NativeDeskto p.WinXP"
https://i.imgur.com/IHPZZZJ.png
Уже решил проблему
https://imgur.com/IHPZZZJ
Почему при использовании функции GTAfunc_IsLineOfSightClear моргают обьекты?
Знаю вопрос ебанутый
решил создать проект, вроде все работает, но все равно выдает значение 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
Попробуй ./test.txt
тоже самое
тоже самое
Ты без точки написал ведь, да?
Ты без точки написал ведь, да?
+
Dark_Knight
01.10.2017, 02:24
+
Укажи тип открытия через std::iobase и проверяй через метод is_open()
MISTER_GONWIK
01.10.2017, 10:23
тоже самое
закинь файл в ту же папку, где лежит и сам .exe
1.Как редактировать готовый(скаченный) .sf скрипт
Если ты задаешь подобные вопросы, то в твоем случае никак.
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, например
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
Дай альтернативу.
Почему не определяет?
https://forum.antichat.xyz/attachments/27161823/
BlackKnigga
10.10.2017, 21:19
Почему не определяет?
Потому что этих функций нет в сф апи. Ищи в собейте
Подскажите пожалуйста, почему не хочется собираться imGUI от Dark'a?
https://forum.antichat.xyz/attachments/27161833/
Подскажите пожалуйста, почему не хочется собираться imGUI от Dark'a?
Проект - свойства - набор инструментов платформы, выбирай там какой есть
Проект - свойства - набор инструментов платформы, выбирай там какой есть
Не помогло
Дай альтернативу.
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
парни, может кто помочь маленький код AHK перевести на С++
Как правильно использовать цикл do..while? После использование ГТА зависает и крашится.
BlackKnigga
16.10.2017, 21:16
Как правильно использовать цикл do..while? После использование ГТА зависает и крашится.
Как юзаешь?
Как юзаешь?
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;
В 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 - это еще одна функция, которая обновляет координаты, к ней идет запрос, она возвращает координаты.
Тогда давай весь код
Тогда давай весь код
Он врод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();
Да и беск. цикл в теле функции тоже нельзя юзать
Что ты вообще сделать хочешь?
Херню какую то написал. Как это скомпилировалось вообще?
void script(void) - где открывающая и закрывающая скобка?
coords; - вызывать надо так: coords();
Да и беск. цикл в теле функции тоже нельзя юзать
Что ты вообще сделать хочешь?
Хочу сделать чтобы в чат флудило координатами персонажа, поможешь с бесконечным циклом, если не сложно? Пока не разобрался куда его можно пихать, а куда нет.
BlackKnigga
16.10.2017, 21:49
Хочу сделать чтобы в чат флудило координатами персонажа, поможешь с бесконечным циклом, если не сложно? Пока не разобрался куда его можно пихать, а куда нет.
В mainloop получай координаты и пиши в чат. Не надо пихать кучу функций и циклов
В mainloop получай координаты и пиши в чат. Не надо пихать кучу функций и циклов
Еще хотел по поводу GetTickCount спросить, я его правильно использую?
C++:
static
DWORD time
=
0
;
if
(
GetTickCount
(
)
-
time
>
1000
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Следующее действие"
)
;
}
Еще хотел по поводу 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
(
)
;
}
Извините за тупость, но еще один вопрос, как это закинуть в mainloop ( и надо ли вообще ), а после вызвать её из тела?
C++:
float
coords
(
)
{
float
fPos
[
3
]
=
{
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
}
;
return
(
fPos
[
0
]
,
fPos
[
1
]
,
fPos
[
2
]
)
;
}
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 и все.
Не надо так. Юзай СVector и все.
Можешь код дать?
Как сделать эмуляцию прокручивания колесика мышки вниз-вверх, после того когда была нажата кнопка
Парни, в инете вообще нету инфо мб все таки кто нибудь знает
Dark_Knight
17.10.2017, 18:16
SendMessage
Dark_Knight
17.10.2017, 20:54
Иди учи основы для начала.
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\..?
На что указатели? И есть ли какая-нибудь тема с обозначениями этих указателей?
ебаать что за говнокод
ебаать что за говнокод
Вытащил отсюда ->
Вопрос - Не могу найти(https://blast.hk/threads/16044/#post-140745) (https://blast.hk/threads/16044/#post-140745)
Кто может помочь?
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.
};
Тот же вопрос жму букву 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
Кто может помочь?
Код:
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
;
}
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
Как сделать окно с сампом активным после того как его свернуть? Чтобы допустим диалоговые окна листались? Не откажусь от кусочка кода :)
Как проверить ли персанаж заспавнился?
Woofing Giraffe
24.10.2017, 17:15
Как проверить ли персанаж заспавнился?
RPC_Spawn хукай
Почему не срабатывает?
Код:
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 если любой диалог открыт
С любым работает. Там true если любой диалог открыт
Код:
if (SF->getSAMP()->getDialog()->iIsActive == true)
Тоже не помогло...
BlackKnigga
24.10.2017, 20:14
Код:
if (SF->getSAMP()->getDialog()->iIsActive == true)
Тоже не помогло...
Код весь дай, сказали же
Код весь дай, сказали же
Решил проблему!
Код:
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;
};
маин луп теперь
маин луп теперь
Решил проблему!
Код:
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
Решил проблему!
Для сравнения используется два знака равно ( == ), все было правильно.
Выше ответ почему не работало
Для сравнения используется два знака равно ( == ), все было правильно.
Выше ответ почему не работало
А если еще сделать проверку по ID диалог, и там же сделать проверку ли он открыт, с =, то тупо будет открываться диалог... Как будто DialogHider залагал..
BlackKnigga
24.10.2017, 20:44
А если еще сделать проверку по ID диалог, и там же сделать проверку ли он открыт, с =, то тупо будет открываться диалог... Как будто DialogHider залагал..
Потому что пишешь единицу вместо сравнивания и диалог показывается.
Потому что пишешь единицу вместо сравнивания и диалог показывается.
Если ставить "==" пишит:
Код:
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;
}
}
Ты внутри хука эту проверку поставить не сможешь, код внутри хука выполняется до появления диалога
Сейчас проверю
Ты внутри хука эту проверку поставить не сможешь, код внутри хука выполняется до появления диалога
С "==" не работает, а вот с "=" работает)
BlackKnigga
24.10.2017, 21:04
С "==" не работает, а вот с "=" работает)
:facepalm:
Это только ты думаешь что работает как надо, можешь вообще тогда условие убрать и ничего не изменится. Совсем
С "==" не работает, а вот с "=" работает)
ты вместо сравнения присваиваешь переменной значение
kawa operand
24.10.2017, 21:05
С "==" не работает, а вот с "=" работает)
"==" оператор сравнения, "=" присвоения. А работает потому, что оператор "=" вернул true
Советую тебе сначала изучить структуру stDialogInfo, да и синтаксис с++ в целом.
:facepalm:
Это только ты думаешь что работает как надо, можешь вообще тогда условие убрать и ничего не изменится. Совсем
Я не правильно написал, работает не коректно! Тоесть вообще капец творится :D
Так что мне делать, как мне проверить тогда открытыт ли диалог? С == 1 и == true не работает
kawa operand
24.10.2017, 21:10
Я не правильно написал, работает не коректно! Тоесть вообще капец творится :D
Так что мне делать, как мне проверить тогда открытыт ли диалог? С == 1 и == true не работает
Ты внутри хука эту проверку поставить не сможешь, код внутри хука выполняется до появления диалога
Я не правильно написал, работает не коректно! Тоесть вообще капец творится :D
Так что мне делать, как мне проверить тогда открытыт ли диалог? С == 1 и == true не работает
int &iDialogStatus = SF->getSAMP()->getDialog()->iIsActive;
if (iDialogStatus) // если открыт
{
// code
}
else // если закрыт
{
// code
}
на вики есть пример как использовать эту функцию
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)
Возможно ли сделать привязку к серийному номеру жёсткого диска?Если - да,то можете дать ссылку на тему или как-нибудь пояснить,как сделать?)
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();
Как узнать убил ли я игрока или нет
Dark_Knight
29.10.2017, 19:39
ScrDeathMessage как вариант.
Из-за чего может не появляться диалог с авторизацией на 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 как вариант.
оно не работает без килл листа
Из-за чего может не появляться диалог с авторизацией на 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
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
Самодельное
Самодельное
Есть в открытом доступе? Или функции 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
На просторах тырынета нашел пакер могайки, решил изучить, но так и не понял зачем там
Это куски клео скрипта
Есть какая-нибудь проверка на то, что игрок в афк? Именно локальный игрок, что бы не выполнялись функции при выходе с АФК
BlackKnigga
03.11.2017, 19:05
Есть какая-нибудь проверка на то, что игрок в афк? Именно локальный игрок, что бы не выполнялись функции при выходе с АФК
GAME->IsPaused() пойдет?
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 который как раз атки и умеет в эти цветотэги
У кого есть функция 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
]
;
}
У кого есть функция 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
Код:
#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
Привет, ребята! Может ли кто-то рассказать как работать с камерой: установить позицию(включая направление "взгляда"), узнать позицию(включая направление "взгляда") и т.п.?
0xB6F258 - направление по горизонтали
0xB6F248 - по вертикали
вроде бы в радианах, не помню
Как отловить исходящий RPC пакет от игрока в raksamp или собейте ? Мне нужно получить RPC_GiveTakeDamage
Как исправить ошибку? Понимаю что файл не может открыться, но почему?
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;
}
Проблему врод исправил но появилась другая,
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
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
не помогло
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 должен сначала придти.
Так же как и остальные RPC. Для этого тебе этот RPC должен сначала придти.
Он не вызывается у меня.. Возможно потому что этот RPC исходящий от игрока.. Он точно должен вызываться ?
itsLegend
11.11.2017, 16:49
Он не вызывается у меня.. Возможно потому что этот RPC исходящий от игрока.. Он точно должен вызываться ?
По-моему, приходит тогда, когда игрок наносит дамаг локальному игроку.
Переустановил 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)
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
microsoft visual studio
Я там и качал, выдавало 2996 ошибки, скачивал до этого 2015 было только 1-2 ошибки
kawa operand
11.11.2017, 17:50
Я там и качал, выдавало 2996 ошибки, скачивал до этого 2015 было только 1-2 ошибки
а directx sdk есть?
а 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 ошибки
только она весит дохера(
Все и так меняется)
без " 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);
Проблема не в этом, еще будут варианты?
как убрать переменную 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);
}
Убери аргумент и пиши свой туда свой ид
@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
в коде
ты уже второй бессмысленный совет даешь,смысл от твоих сообщений?
ты уже второй бессмысленный совет даешь,смысл от твоих сообщений?
Смысл от твоих вопрос если ты не прикрепляешь код к ним?
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
;
}
Перед чтением проверяй указатель на валидность.
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
;
Меняй путь на шестой строке на свой.
bsClass.Write(uint32_t(SF->getSAMP()->getPlayers()->sLocalPlayerID));
Подскажите, как сделать дебаг сборки собейта, чтобы выяснить причину краша игры?
Без него игра нормально работает.
traceLastFunc( "tut norm" );
Log( "poka norm" );
Как прочесть запись в реестре (строку) если пункт с ней не именован?
Везде где учат читать строки у них есть название, так что гугл не помог
Запись приклеил к посту
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot