Просмотр полной версии : С/С++ Вопрос - Ответ
kawa operand
28.06.2018, 15:32
ну вот и гугли
как считать последнюю строку файла c++
регулярные выражения c++
запись в файл c++
madrasso
28.06.2018, 15:37
как считать последнюю строку файла c++
Не, мне нужно не из чат лога, а из памяти игры, ибо работа направлена на несколько окон, а в чат лог идет последнее открытое окно сампа.
kawa operand
28.06.2018, 15:41
через память я уже описал как делается
nt_qwark
28.06.2018, 19:03
Ребзи есть какая то функа в гташке и ее можно вызвать (отобразить текст на экране) что то там jumpmessage
Научите ее вызывать из консоли на c++ plez
kawa operand
28.06.2018, 20:32
ох блч точно не знаю как это делается но вроде ты должен найти местечко где можно записать несколько десятков байт своей функции которая будет вызывать смс в гта и запускать эту функцию которую записал через CreateRemoteThread чето там ну или просто свяжи свою консоль и гта са через длл
это если тебе дохуя функций надо вызывать там
nt_qwark
28.06.2018, 22:47
Нельзя без инжектов обойтись?
ох блч точно не знаю как это делается но вроде ты должен найти местечко где можно записать несколько десятков байт своей функции которая будет вызывать смс в гта и запускать эту функцию которую записал через CreateRemoteThread чето там ну или просто свяжи свою консоль и гта са через длл
это если тебе дохуя функций надо вызывать там
жду ответа профессионалов
(не шарю в читмейкинге, реверсе, дизасм и тд)
kawa operand
28.06.2018, 22:51
ну невозможно вроде(искал когда то давно) по другому вызвать функцию в чужом процессе, либо функцию свою пиши туда либо библиотеку
nt_qwark
28.06.2018, 23:20
да ну
а не проще найти оффсет это йфунки в игре и проводить с ним манипуляции? какой нах инжект
winapi наше всё
kawa operand
28.06.2018, 23:36
я тебе про то и говорю, чтобы проводить такие манипуляции в чужом процессе надо инжектить в него свой код
nt_qwark
29.06.2018, 13:48
я тебе про то и говорю, чтобы проводить такие манипуляции в чужом процессе надо инжектить в него свой код
Зачем инжектить что то? Слышал про writeprocessmemory(..) readprocessmemory(..) ??
Я знаю как примерно должно это работать, но не знаю как это написать
Мы тайпдефаем нужную функу JumpMessageA вроде бы, создаем поток в процессе и выполняем эту функцию
Но вот с написанием трабл.(
AddMessageJumpQ
kawa operand
29.06.2018, 13:56
начать стоит хотя бы с того, что addmessagejumpq это __cdecl функция, а threadproc для createremotethread __stdcall да и возвращаемые значения вроде как разные, аргументы тоже.
почему ты так не хочешь инжектить свой код ?
nt_qwark
29.06.2018, 14:01
Как это запустить без инжекта? Используя консоль на плюсиках
void AddMessageJumpQ(PCHAR text, UINT time, USHORT flag, bool bPreviousBrief) // Функция показа сообщения на экране.
{
((void(__cdecl *)(PCHAR, UINT, USHORT, bool))0x69F1E0)(text, time, flag, bPreviousBrief);
}
kawa operand
29.06.2018, 14:01
C++:
DWORD WINAPI
ThreadProc
(
_In_ LPVOID lpParameter
)
;
void
(
__cdecl
*
)
(
PCHAR
,
UINT
,
USHORT
,
bool
)
;
у них вообще ничего общего нет, ты не сможешь кинуть поток в эту функцию, нужно инжектить свой код
nt_qwark
29.06.2018, 14:06
CreateRemoteThread
А ну по сути это и есть инжект. Ладно. Как заинжектеть це функу и вызывать ее из своей консоли?
kawa operand
29.06.2018, 14:10
6A 00
6A 00
6A 000003E8
68 textaddr
E8 function_addr
add esp, 16
C3
*** знает вроде так, поднятие стека еще скомпилируй
nt_qwark
29.06.2018, 14:11
6A 00
6A 00
6A 000003E8
68 textaddr
E8 function_addr
add esp, 16
C3
*** знает вроде так, поднятие стека еще скомпилируй
И как это использовать?
kawa operand
29.06.2018, 14:12
записывать в память игры это и кидать поток туда
и еще посмотри в отладчике сколько точно байт оно опускает, я не уверен что 16
nt_qwark
29.06.2018, 14:13
#define funcAddr 0x0
const char* lpText = "TEXT";
__asm {
6A 00
6A 00
6A 000003E8
68 &lpText
E8 funcAddr
add esp, 16
C3
}
Вот так?
хм не понял, как я это запишу ля
kawa operand
29.06.2018, 14:15
unsigned char func[] = {0x6A и тд}
nt_qwark
29.06.2018, 14:16
Ты рофлишь? Что значит "кидать поток туда"?
kawa operand
29.06.2018, 14:18
createremotethread
nt_qwark
29.06.2018, 14:18
unsigned char func[] = {0x6A и тд}
а, понятно.
Почему в плюсах байты это блять unsigned char????? Не понимаю логики в таком названии
kawa operand
29.06.2018, 14:20
потому что typedef unsigned char BYTE
nt_qwark
29.06.2018, 14:24
Ну это я знаю
Из windows.h этот тайпдеф
Но почему блять unsigned char? БЕЗЗНАКОВЫЙ СИМВОЛ, БАЙТ - СИМВОЛ???????
Так. Ты мне наотвечал. В итоге мне нужно для каждого вызова записывать в память и кидать поток, да?
kawa operand
29.06.2018, 14:26
да
@ForHax (https://www.blast.hk/members/139930/)
nt_qwark
29.06.2018, 14:44
[QUOTE="Муззи"]
Как синхру сделать?
Сделал так, но значение переменной true не устанавливается:
C++:
[CODE]
#include
#include
#pragma comment(lib,"User32.lib")
using
namespace
std
;
static
bool
g_Active
=
false
;
DWORD WINAPI
proizv
(
PVOID Parametr
)
{
while
(
true
)
{
if
(
GetAsyncKeyState
(
81
)
==
-
32768
)
{
while
(
GetAsyncKeyState
(
81
)
)
{
}
g_Active
=
true
;
}
Sleep
(
20
)
;
}
return
0
;
}
void
main
(
)
{
DWORD idThread
,
dwThrdParam
=
1
;
HANDLE h1
;
h1
=
CreateThread
(
NULL
,
0
,
proizv
,
&
dwThrdParam
,
0
,
&
idThread
)
;
while
(
true
)
{
if
(
g_Active
==
true
)
{
cout
Dark_Knight
30.06.2018, 14:23
bool KeyIsPressed(int vkey) {
if (GetAsyncKeyState(vkey) != 0) return true;
return false;
}
:facepalm2:
C++:
bool
KeyIsPressed
(
int
vkey
)
{
return
GetAsyncKeyState
(
vkey
)
!=
0
;
}
Musaigen
01.07.2018, 04:02
Подскажите, что нужно сделать с такой ошибкой?
Здравствуйте, друг, я вас очень прошу, покинуть текущее место лечения, и перейти в другое, ибо не помогает, по всей видимости.
Funkastarz
01.07.2018, 04:25
Здравствуйте, друг, я вас очень прошу, покинуть текущее место лечения, и перейти в другое, ибо не помогает, по всей видимости.
От табуретки получишь больше советов, чем от тебя. Побольше запятых ставь, умник.
Dark_Knight
01.07.2018, 06:27
От табуретки получишь больше советов, чем от тебя. Побольше запятых ставь, умник.
Окей. Сколько надо не иметь ума, чтобы сурсы С++ вставить в скриптовый SCM компилятор под названием Sanny Builder?
kawa operand
01.07.2018, 10:42
Подскажите, что нужно сделать с такой ошибкой?
попробуй обновить санни билдер
mazec0de
01.07.2018, 18:48
приветствую всех.
можете подсказать почему пропадают ники и хп бар игроков? так же лейблы. в cr-mp
все что я нарыл, это то что при показе imgui вся эта лабуда случается.
без показа imgui все в норме, при открытии меню или показа боттом бара все пропадает.
p.s исходники слонобойки
kawa operand
01.07.2018, 19:01
ну это особенности хука
скорее всего он как и я хукает EndScene
если ты юзаешь сурсы его то ты тут ничего не исправишь))
mazec0de
01.07.2018, 19:03
ну это особенности хука
скорее всего он как и я хукает EndScene
если ты юзаешь сурсы его то ты тут ничего не исправишь))
а конкретней можно? чего именно не хватает imgui? или наоборот
CleanLegend
01.07.2018, 19:03
приветствую всех.
можете подсказать почему пропадают ники и хп бар игроков? так же лейблы. в cr-mp
все что я нарыл, это то что при показе imgui вся эта лабуда случается.
без показа imgui все в норме, при открытии меню или показа боттом бара все пропадает.
p.s исходники слонобойки
Получи device по другому
ну это особенности хука
скорее всего он как и я хукает EndScene
если ты юзаешь сурсы его то ты тут ничего не исправишь))
Тут проблема не том, что хукаешь, а как ты получаешь device.
mazec0de
01.07.2018, 19:06
Получи device по другому
Тут проблема не том, что хукаешь, а как ты получаешь device.
хорошо, спасибо за наводку
приветствую всех.
можете подсказать почему пропадают ники и хп бар игроков? так же лейблы. в cr-mp
все что я нарыл, это то что при показе imgui вся эта лабуда случается.
без показа imgui все в норме, при открытии меню или показа боттом бара все пропадает.
p.s исходники слонобойки
потому что исходники слонобойки. На гите в оффициальной репе ImGui все исправленно и ничего не пропадает.
IsInRangeOf(*xpos, *ypos, x, y, radius))
GetfAngleByPos(*xpos, *ypos, x, y);
Помогите найти определения , хочу вырезать функции.Спасибо заранее.
kawa operand
02.07.2018, 09:11
первую очень легко сделать самостоятельно
а вторую чето не понял
первую очень легко сделать самостоятельно
а вторую чето не понял
Ну определение функции .
Т.е ее исходник.
Dark_Knight
02.07.2018, 12:52
Ну определение функции .
Т.е ее исходник.
Может тебе еще и кошкодевочку найти?
Может тебе еще и кошкодевочку найти?
Ну желательно.
kawa operand
02.07.2018, 13:27
я бы тоже не отказался
Подскажите пожалуйста , где хотя бы найти информацию по этим функциям.
IsInRangeOf(*xpos, *ypos, x, y, radius))
GetfAngleByPos(*xpos, *ypos, x, y);
CleanLegend
02.07.2018, 16:59
Подскажите пожалуйста , где хотя бы найти информацию по этим функциям.
IsInRangeOf(*xpos, *ypos, x, y, radius))
GetfAngleByPos(*xpos, *ypos, x, y);
Функция может иметь разные действия, если ты хочешь прям повторить эту функцию, то нужно искать там, где ты её взял.
Могу посоветовать аналог, возможно подойдет - Информация - [SF] Полезные функции(https://blast.hk/threads/10970/#post-124093) (https://blast.hk/threads/10970/#post-124093)
насчет углов, посмотри plugin от SR_team - AsiPlugin(https://git.prime-hack.net/SR_team/AsiPlugin) (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lQbHVnaW4)
И на будущее, не создавай темы по каждому вопросу, достаточно написать вопрос в эту тему.
BlackKnigga
02.07.2018, 17:23
приветствую всех.
можете подсказать почему пропадают ники и хп бар игроков? так же лейблы. в cr-mp
все что я нарыл, это то что при показе imgui вся эта лабуда случается.
без показа imgui все в норме, при открытии меню или показа боттом бара все пропадает.
p.s исходники слонобойки
Была такая штука, неверно сохранялись\восстанавлива ись стейты девайса. В последнем имгуи таких проблем нет.
Как получить хп ?
stPassengerData ->byteHealth;
Всем хай,использую хук на HandleRPCPacketFunc в двух плагинах и получается,что он работает то в одном плагине,то в другом.
C++:
#define SAMP_HOOKENTER_HANDLE_RPC 0x3743D
#define SAMP_HOOKENTER_HANDLE_RPC2 0x373C9
#define SAMP_HOOKEXIT_HANDLE_RPC 0x37443
#define SAMP_HOOKEXIT_HANDLE_RPC2 0x37451
void
HandleRPCPacketFunc
(
unsigned
char
id
,
RPCParameters
*
rpcParams
,
void
(
*
callback
)
(
RPCParameters
*
)
)
{
if
(
rpcParams
!=
nullptr
&&
rpcParams
->
numberOfBitsOfData
>=
8
)
{
BitStream
bsData
(
rpcParams
->
input
,
rpcParams
->
numberOfBitsOfData
/
8
,
false
)
;
switch
(
id
)
{
case
RPC_DeathMessage
:
{
pSAMP
->
addMessageToChat
(
-
1
,
"plugin ONE"
)
;
int16_t
plaerid
,
killerid
;
int8_t
resaon
;
bsData
.
ResetReadPointer
(
)
;
bsData
.
Read
(
killerid
)
;
bsData
.
Read
(
plaerid
)
;
bsData
.
Read
(
resaon
)
;
break
;
}
}
}
callback
(
rpcParams
)
;
}
void
_declspec
(
naked
)
hook_handle_rpc_packet
(
void
)
{
static
RPCParameters
*
pRPCParams
=
nullptr
;
static
RPCNode
*
pRPCNode
=
nullptr
;
static
DWORD dwTmp
=
0
;
__asm pushad
;
__asm mov pRPCParams
,
eax
;
__asm mov pRPCNode
,
edi
;
HandleRPCPacketFunc
(
pRPCNode
->
uniqueIdentifier
,
pRPCParams
,
pRPCNode
->
staticFunctionPointer
)
;
dwTmp
=
pSAMP
->
getSAMPAddr
(
)
+
SAMP_HOOKEXIT_HANDLE_RPC
;
__asm popad
;
__asm add esp
,
4
__asm jmp dwTmp
;
}
void
_declspec
(
naked
)
hook_handle_rpc_packet2
(
void
)
{
static
RPCParameters
*
pRPCParams
=
nullptr
;
static
RPCNode
*
pRPCNode
=
nullptr
;
static
DWORD dwTmp
=
0
;
__asm pushad
;
__asm mov pRPCParams
,
ecx
;
__asm mov pRPCNode
,
edi
;
HandleRPCPacketFunc
(
pRPCNode
->
uniqueIdentifier
,
pRPCParams
,
pRPCNode
->
staticFunctionPointer
)
;
dwTmp
=
pSAMP
->
getSAMPAddr
(
)
+
SAMP_HOOKEXIT_HANDLE_RPC2
;
__asm popad
;
__asm jmp dwTmp
;
}
void
InstallAllHooks
(
)
{
static
int
iSAMPHooksInstalled
;
if
(
!
iSAMPHooksInstalled
)
{
if
(
pSAMP
->
getInfo
(
)
==
NULL
)
return
;
/*
https://github.com/sr-tream/UniLib/blob/master/UniLib/CHooks.hpp
*/
HookRPC1
=
new
CHookJmp
(
pSAMP
->
getSAMPAddr
(
)
+
SAMP_HOOKENTER_HANDLE_RPC
,
hook_handle_rpc_packet
,
6
)
;
//
HookRPC2
=
new
CHookJmp
(
pSAMP
->
getSAMPAddr
(
)
+
SAMP_HOOKENTER_HANDLE_RPC2
,
hook_handle_rpc_packet2
,
8
)
;
iSAMPHooksInstalled
=
1
;
}
}
у второго плагина код один и тот же,за исключением другого RPC.
Я понимаю,что идёт конфликт хуков,но как его исправить?
kawa operand
02.07.2018, 20:48
проверять если в месте хука уже есть хук то после выполнения своего выполнять чужой который был до тебя
Интересует как сделать это?
.. после выполнения своего выполнять чужой который был до тебя
kawa operand
02.07.2018, 22:58
что за тупой вопрос, поставил хук и не знает как проверить байт пиздец
это
считываешь старый адрес и звонишь в него в конце хука своего
считываешь старый адрес и звонишь в него в конце хука своего
Сколько не гуглил,не смог найти инфы по данной теме.Был бы благодарен частью кода
Сколько не гуглил,не смог найти инфы по данной теме.Был бы благодарен частью кода
если по адресу функции, которую хукаешь, уже записан jmp (e9, addr)- то выполнить его после отработки твоеего хука
Добрый день, пришёл к вам за помощью так как вообще не втыкаю в чем проблема. Суть в том что я хочу сделать программу которая берёт функции с DLL Библиотеки. 1. Создал .exe файл (консоль) и DLL Библиотеку с пару функций и соединил библиотеку к .exe файлу, но возникли две ошибки с которыми я явно не понимаю как работать, надеюсь на вашу помощь. Заранее спасибо!
Если надо могу всё подробно описать что за функции и тд и тп.
-raymond-
03.07.2018, 13:20
как проверить всех игроков в определенном квадрате, в квадрате типо гангзоны?
iAmerican
03.07.2018, 13:33
как проверить всех игроков в определенном квадрате, в квадрате типо гангзоны?
C++:
[CODE]
//Цикл всех игроков
//получение их координат ...
// (x1,y1) - корды левой верхней точки гангзоны
// (x2,y2) - корды правой нижней точки гангзоны
// (x,y) - координаты игроков
if
(
x
>=
x1
&&
y
>=
y1
&&
x
Добрый день, пришёл к вам за помощью так как вообще не втыкаю в чем проблема. Суть в том что я хочу сделать программу которая берёт функции с DLL Библиотеки. 1. Создал .exe файл (консоль) и DLL Библиотеку с пару функций и соединил библиотеку к .exe файлу, но возникли две ошибки с которыми я явно не понимаю как работать, надеюсь на вашу помощь. Заранее спасибо!
Если надо могу всё подробно описать что за функции и тд и тп.
Библиотеки не подключил.
-raymond-
03.07.2018, 14:07
как узнать букву диска на котором лежит гта?
kawa operand
03.07.2018, 14:08
получить указатель на строку с текущей директорией и прочитать только первый байт))
-raymond-
03.07.2018, 15:39
как отследить что игрок ввел определенную команду (отсканировав всех игроков)?
kawa operand
03.07.2018, 15:40
так нельзя
Библиотеки не подключил.
#pragma comment(lib, "*.lib") Ты про это говоришь? Если да, то он у меня подключен, но ту же самую ошибку и выдаёт :(
#pragma comment(lib, "*.lib")
Обычно, по общепринятой практике, подключение библиотек делают в настройках проекта.
Хорошо бы скинуть что-то про декорированные имена, extern "C", и как это согласовывается в С/C++, но, скорее всего, это не так уж и важно, ведь это абсолютно общедоступная и легко находимая информация.
В общем, на конкретно поставленный вопрос вот прям все расписано и по полочкам разложено Пошаговое руководство. Создание и использование библиотеки DLL (C++)(https://msdn.microsoft.com/ru-ru/library/ms235636.aspx) (https://www.blast.hk/redirect/aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vcnUtcnUvbGlicm FyeS9tczIzNTYzNi5hc3B4)
И тоже самое, но на английском, и не для методов, а для функций (для каждой кнопочки скриншот даже) MicrosoftDocs/cpp-docs(https://github.com/MicrosoftDocs/cpp-docs/blob/master/docs/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp.md) (https://github.com/MicrosoftDocs/cpp-docs/blob/master/docs/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp.md)
-raymond-
04.07.2018, 10:32
как отследить что по моему персонажу попали из оружия?
CleanLegend
04.07.2018, 15:15
как отследить что по моему персонажу попали из оружия?
Через RPC_GiveTakeDamage
greetings man
04.07.2018, 17:43
В С++ не силён, у меня есть исходник файла .h, как его скомпилить в exe и реально ли это?
Файл не грузится сюда - оставляю ссылку: DropMeFiles – free one-click file sharing service(https://dropmefiles.com/nmQGI) (https://www.blast.hk/redirect/aHR0cHM6Ly9kcm9wbWVmaWxlcy5jb20vbm1RR0k)
Dark_Knight
04.07.2018, 20:02
Это, как бы, часть исходника. С ней ты ничего не сделаешь.
Хочу выводить квадрат по команде, но чёт делаю не правильное укажите на ошибки))
C++:
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
using
namespace
std
;
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
bool
CALLBACK
Present
(
CONST RECT
*
pSourceRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindowOverride
,
CONST RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
)
{
SF
->
getRender
(
)
->
DrawBox
(
500
,
500
,
25
,
25
,
D3DCOLOR_ARGB
(
255
,
0
,
255
,
0
)
)
;
SF
->
getRender
(
)
->
EndRender
(
)
;
}
;
return
true
;
}
;
void
CALLBACK
cmd_show_info_player
(
std
::
string param
)
{
Present
(
)
;
// ЧЁТ ДЕЛАЮ НЕ ПРАВИЛЬНО :)
}
;
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
SF
->
getRender
(
)
->
registerD3DCallback
(
eDirect3DDeviceMethods
::
D3DMETHOD_PRESENT
,
Present
)
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"ren"
,
cmd_show_info_player
)
;
}
}
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
;
}
Dark_Knight
05.07.2018, 02:27
Хочу выводить квадрат по команде, но чёт делаю не правильное укажите на ошибки))
C++:
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
bool
render
=
false
;
bool
CALLBACK
Present
(
CONST RECT
*
pSourceRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindowOverride
,
CONST RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
&&
render
)
{
SF
->
getRender
(
)
->
DrawBox
(
500
,
500
,
25
,
25
,
D3DCOLOR_ARGB
(
255
,
0
,
255
,
0
)
)
;
SF
->
getRender
(
)
->
EndRender
(
)
;
}
;
return
true
;
}
;
void
CALLBACK
cmd_show_info_player
(
std
::
string param
)
{
render
=
!
render
;
}
;
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
!
GAME
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getRender
(
)
->
registerD3DCallback
(
eDirect3DDeviceMethods
::
D3DMETHOD_PRESENT
,
Present
)
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"ren"
,
cmd_show_info_player
)
;
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
switch
(
dwReasonForCall
)
{
case
DLL_PROCESS_ATTACH
:
SF
->
initPlugin
(
mainloop
,
hModule
)
;
break
;
}
return
TRUE
;
}
Как добавить сообщение в чат сампа и получить IP сервера? (без SF и всяких API)
через структуры. Они есть в собе, сф и других апи
Задался таким вопросом, как делают красивые GUI(ЮИ, точно не знаю) для всяких программ, могу пример привести:
1. Лаунчер EpicGames, у них хороший дизайн, моё внимание довольно таки привели.
2. Steam;Origin;Uplay =)
iAmerican
05.07.2018, 11:43
Задался таким вопросом, как делают красивые GUI(ЮИ, точно не знаю) для всяких программ, могу пример привести:
1. Лаунчер EpicGames, у них хороший дизайн, моё внимание довольно таки привели.
2. Steam;Origin;Uplay :)
Самописные
Самописные
Задам тупой вопрос, это как? (просто не шарю)
iAmerican
05.07.2018, 12:52
Задам тупой вопрос, это как? (просто не шарю)
Там сидит целая команда которая пишет интерфейс для этих лаунчеров. Они не брали готовое API.
Исходник - [SF-Plugin] Menu + function(https://blast.hk/threads/12290/) (https://blast.hk/threads/12290/) - как пример. Только что ты перечислил у них все гораздо сложнее.
Я с ними вожусь несколько часов, не выходит ничего, можешь объяснить как нибудь?
BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L675) (https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L675)
если ты не можешь скопировать одну функу, то просто забей и иди лучше погуляй)
Как получить X Y радара?
X = 0x858A10 [float]
Y = 0x866B70 [float]
Как получить ХП?
Пробовал вот так stPassengerData ->byteHealth; не получилось((
kawa operand
05.07.2018, 23:23
Свое хп?
kawa operand
06.07.2018, 00:01
Пассажиров своей машины ?
Пассажиров своей машины ?
Не, просто получить ХП игроков в зоне стрима
kawa operand
06.07.2018, 00:34
а зачем хотел получить хп пассажиров
stPlayerPool::pRemotePlayer[id]->pPlayerData->fActorHealth
а зачем хотел получить хп пассажиров
Та я думал что получаю ХП игроков, спасибо большое.
Где можно установить Шаблон WIN32 для С++?
В Visual Studio Installer что-то не нашёл, помогите пожалуйста =(
kawa operand
06.07.2018, 23:05
Пустой проект создавай и настраивай
Как отправить сообщение серверу ?
Dark_Knight
07.07.2018, 01:55
Как отправить сообщение серверу ?
Конкретную задачу опиши.
Конкретную задачу опиши.
Ну в чат написать надо, на клее это say.
Ну в чат написать надо, на клее это say.
BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L748) (https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L748)
Пустой проект создавай и настраивай
Да у меня проблемы с .DLL+.EXE в .ехе есть такие ошибки с которыми я не умею обращаться
UPD: Суть в том что я хочу брать функции с .DLL, а использовать с .exe. Но столько ошибок, я уже не могу тут сидеть... =(
https://forum.antichat.xyz/attachments/27224682/
kawa operand
07.07.2018, 14:04
Dll нужно настраивать
А exe win32 (WinMain) оно либо шаблон есть либо по дефолту пустой проект это оно и есть
Dll нужно настраивать
А exe win32 (WinMain) оно либо шаблон есть либо по дефолту пустой проект это оно и есть
А как правильно его настроить?
kawa operand
07.07.2018, 14:57
Изменить тип конфигурации в свойствах проекта
Dima_Myrzich
07.07.2018, 15:24
Как сделать рекурсию ?
kawa operand
07.07.2018, 15:44
void foo() {
foo ();
}
-raymond-
07.07.2018, 18:59
как сделать так чтобы скрипт автоматически выбирал нужный listitem в диалоге отправленном сервером?
Dark_Knight
07.07.2018, 19:03
как сделать так чтобы скрипт автоматически выбирал нужный listitem в диалоге отправленном сервером?
Скрипт? Пиздуй в раздел луа и клео.
-raymond-
07.07.2018, 19:18
сорян перепутал, не скрипт, плагин
kawa operand
07.07.2018, 19:53
с сф или без
-raymond-
07.07.2018, 20:30
в сф
Пробовал получить ХП игроков в стриме, но чет не получилось, укажите на ошибки.
C++:
#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
[
i
]
;
stUnoccupiedData
*
ppPlayer
;
// ПЫТАЛСЯ ПОЛУЧИТЬ
if
(
!
pPlayer
)
return
;
sprintf
(
buf
,
"Nickname - %s, Ping - %d, Score - %d, isNPC - %d, HP - %0.0f AFKState - %d"
,
pPlayer
->
szPlayerName
,
pPlayer
->
iPing
,
pPlayer
->
iScore
,
pPlayer
->
iIsNPC
,
ppPlayer
->
fHealth
,
// ПЫТАЛСЯ ПОЛУЧИТЬ
pPlayer
->
pPlayerData
->
iAFKState
==
2
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
buf
)
;
}
;
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
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
;
}
kawa operand
07.07.2018, 20:52
в сф
Регай колбек и там меняй парметр листбокса
Пробовал получить ХП игроков в стриме, но чет не получилось, укажите на ошибки.
C++:
#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
[
i
]
;
stUnoccupiedData
*
ppPlayer
;
// ПЫТАЛСЯ ПОЛУЧИТЬ
if
(
!
pPlayer
)
return
;
sprintf
(
buf
,
"Nickname - %s, Ping - %d, Score - %d, isNPC - %d, HP - %0.0f AFKState - %d"
,
pPlayer
->
szPlayerName
,
pPlayer
->
iPing
,
pPlayer
->
iScore
,
pPlayer
->
iIsNPC
,
ppPlayer
->
fHealth
,
// ПЫТАЛСЯ ПОЛУЧИТЬ
pPlayer
->
pPlayerData
->
iAFKState
==
2
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
buf
)
;
}
;
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
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
;
}
Ты бля сколько дней уже не можешь получить хп игроков
Я бы уже давно рыдать начал и кричать что программирование это не моё
А потом вскрылся
И я не могу понять какие ошибки искать в коде из примера
Регай колбек и там меняй парметр листбокса
Ты бля сколько дней уже не можешь получить хп игроков
Я бы уже давно рыдать начал и кричать что программирование это не моё
А потом вскрылся
И я не могу понять какие ошибки искать в коде из примера
Могёшь замутить получение ХП игроков в зоне стрима?
kawa operand
07.07.2018, 20:59
окей ща
CleanLegend
07.07.2018, 21:04
Пробовал получить ХП игроков в стриме, но чет не получилось, укажите на ошибки.
C++:
#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
[
i
]
;
stUnoccupiedData
*
ppPlayer
;
// ПЫТАЛСЯ ПОЛУЧИТЬ
if
(
!
pPlayer
)
return
;
sprintf
(
buf
,
"Nickname - %s, Ping - %d, Score - %d, isNPC - %d, HP - %0.0f AFKState - %d"
,
pPlayer
->
szPlayerName
,
pPlayer
->
iPing
,
pPlayer
->
iScore
,
pPlayer
->
iIsNPC
,
ppPlayer
->
fHealth
,
// ПЫТАЛСЯ ПОЛУЧИТЬ
pPlayer
->
pPlayerData
->
iAFKState
==
2
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
buf
)
;
}
;
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
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
;
}
Ты используешь для получения хп игроков не правильную структуру.
C++:
stUnoccupiedData
*
ppPlayer
;
// это удали
sprintf
(
buf
,
"Nickname - %s, Ping - %d, Score - %d, isNPC - %d, HP - %.1f AFKState - %d"
,
pPlayer
->
szPlayerName
,
pPlayer
->
iPing
,
pPlayer
->
iScore
,
pPlayer
->
iIsNPC
,
pPlayer
->
pPlayerData
->
fActorHealth
,
pPlayer
->
pPlayerData
->
iAFKState
==
2
)
;
Dark_Knight
07.07.2018, 21:07
Могёшь замутить получение ХП игроков в зоне стрима?
Ты в блокноте пишешь? VS уже давно бы тебе указала на ошибку.
kawa operand
07.07.2018, 21:12
C++:
for
(
unsigned
short
i
=
0
;
i
getSAMP
(
)
->
getPlayers
(
)
->
IsPlayerDefined
(
i
,
true
)
)
{
float
health
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
->
fActorHealth
;
}
}
попробуй так
Ты используешь для получения хп игроков не правильную структуру.
C++:
stUnoccupiedData
*
ppPlayer
;
// это удали
sprintf
(
buf
,
"Nickname - %s, Ping - %d, Score - %d, isNPC - %d, HP - %.1f AFKState - %d"
,
pPlayer
->
szPlayerName
,
pPlayer
->
iPing
,
pPlayer
->
iScore
,
pPlayer
->
iIsNPC
,
pPlayer
->
pPlayerData
->
fActorHealth
,
pPlayer
->
pPlayerData
->
iAFKState
==
2
)
;
Все работает
C++:
for
(
unsigned
short
i
=
0
;
i
getSAMP
(
)
->
getPlayers
(
)
->
IsPlayerDefined
(
i
,
true
)
)
{
float
health
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
->
fActorHealth
;
}
}
попробуй так
Спасибо вам
-raymond-
07.07.2018, 23:16
Регай колбек и там меняй парметр листбокса
поподробнее можн?
Уже какой день пытаюсь это сделать,нечего не выходит,то крашит,то игра намертво виснет,уже хз что делать
если по адресу функции, которую хукаешь, уже записан jmp (e9, addr)- то выполнить его после отработки твоеего хука
kawa operand
07.07.2018, 23:38
Регай евент входящих рпц там отправляй измененные параметры и отклоняй показ диалога
Уже какой день пытаюсь это сделать,нечего не выходит,то крашит,то игра намертво виснет,уже хз что делать
Забей *** Ты все равно не поймёшь
-raymond-
08.07.2018, 11:47
покажите пример создания двумерного строкового массива и его использование
kawa operand
08.07.2018, 13:06
std::string a[5][5];
-raymond-
08.07.2018, 15:19
как сымитировать нажатие клавишы на клавиатуре?
CleanLegend
08.07.2018, 15:53
как сымитировать нажатие клавишы на клавиатуре?
Функция keybd_event(http://www.vsokovikov.narod.ru/New_MSDN_API/Keyb_input/fn_keybd_event.htm) (https://www.blast.hk/redirect/aHR0cDovL3d3dy52c29rb3Zpa292Lm5hcm9kLnJ1L05ld19NU0 ROX0FQSS9LZXliX2lucHV0L2ZuX2tleWJkX2V2ZW50Lmh0bQ)
-raymond-
09.07.2018, 08:41
в чем ошибка? крашит игру
C++:
std
::
string businnes_name
[
45
]
[
]
=
{
"Alhambra"
,
"PigPen"
,
"Misty Club"
,
"Casino Bellagio"
,
"Grove Street Bar"
,
"Sobrino de Botin"
,
"Vinewood Burger"
,
"Marina Burger"
,
"Idlewood Pizza"
,
"Downtown Cluc"
,
"Marina Cluc"
,
"Idelwood 24/7"
,
"Flint 24/7"
,
"Easter 24/7"
,
"Mullholand 24/7"
,
"Jizzy"
,
"Redsands West 24/7"
,
"Julius 24/7"
,
"Lil\"Probe\"inn"
,
"Idelwood Gas"
,
"Mullholang Gas"
,
"Whetstone 24/7"
,
"East Cluc"
,
"WillowField Cluc"
,
"Flats Cluc"
,
"Financial Pizza"
,
"Come-A-Lot Gas"
,
"FortCarson Gas"
,
"BoneCountry Gas"
,
"Julius Gas"
,
"PricklePine Gas"
,
"Flint Gas"
,
"Easter Gas"
,
"Doherty Gas"
,
"Juniper 24/7"
,
"Juniper Gas"
,
"Emerald Isle 24/7"
,
"Emerald Isle Gas"
,
"Redsands-West Gas"
,
"ElGuebrabos Gas"
,
"TierraRobada Gas"
,
"AngelPine Gas"
,
"WhetStone Gas"
,
"Dilimore Gas"
,
"Montgomery Gas"
,
}
;
void
CALLBACK
biz_check
(
std
::
string param
)
{
for
(
int
i
=
0
;
i
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
COLOR_GREY
,
"%s"
,
businnes_name
[
i
]
)
;
}
}
Dark_Knight
09.07.2018, 09:16
businnes_name.c_str() юзай.
-raymond-
09.07.2018, 10:23
в конце последнего биза в списке выдает один раз такие иероглифы
https://i.imgur.com/VMuoHLa.png
C++:
void
CALLBACK
biz_check
(
std
::
string param
)
{
char
str
[
45
]
[
30
]
=
{
"Alhambra"
,
"PigPen"
,
"Misty Club"
,
"Casino Bellagio"
,
"Grove Street Bar"
,
"Sobrino de Botin"
,
"Vinewood Burger"
,
"Marina Burger"
,
"Idlewood Pizza"
,
"Downtown Cluc"
,
"Marina Cluc"
,
"Idelwood 24/7"
,
"Flint 24/7"
,
"Easter 24/7"
,
"Mullholand 24/7"
,
"Jizzy"
,
"Redsands West 24/7"
,
"Julius 24/7"
,
"Lil\"Probe\"inn"
,
"Idelwood Gas"
,
"Mullholang Gas"
,
"Whetstone 24/7"
,
"East Cluc"
,
"WillowField Cluc"
,
"Flats Cluc"
,
"Financial Pizza"
,
"Come-A-Lot Gas"
,
"FortCarson Gas"
,
"BoneCountry Gas"
,
"Julius Gas"
,
"PricklePine Gas"
,
"Flint Gas"
,
"Easter Gas"
,
"Doherty Gas"
,
"Juniper 24/7"
,
"Juniper Gas"
,
"Emerald Isle 24/7"
,
"Emerald Isle Gas"
,
"Redsands-West Gas"
,
"ElGuebrabos Gas"
,
"TierraRobada Gas"
,
"AngelPine Gas"
,
"WhetStone Gas"
,
"Dilimore Gas"
,
"Montgomery Gas"
}
;
for
(
int
i
=
0
;
i
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
COLOR_GREY
,
"%s"
,
str
[
i
]
)
;
}
}
Dark_Knight
09.07.2018, 10:41
Ты проверяешь 46 елементов. Юзай вектора, они удобнее. Инклуды только подключи.
C++:
vector
Strings
=
{
"Alhambra"
,
"PigPen"
,
"Misty Club"
,
"Casino Bellagio"
,
"Grove Street Bar"
,
"Sobrino de Botin"
,
"Vinewood Burger"
,
"Marina Burger"
,
"Idlewood Pizza"
,
"Downtown Cluc"
,
"Marina Cluc"
,
"Idelwood 24/7"
,
"Flint 24/7"
,
"Easter 24/7"
,
"Mullholand 24/7"
,
"Jizzy"
,
"Redsands West 24/7"
,
"Julius 24/7"
,
"Lil\"Probe\"inn"
,
"Idelwood Gas"
,
"Mullholang Gas"
,
"Whetstone 24/7"
,
"East Cluc"
,
"WillowField Cluc"
,
"Flats Cluc"
,
"Financial Pizza"
,
"Come-A-Lot Gas"
,
"FortCarson Gas"
,
"BoneCountry Gas"
,
"Julius Gas"
,
"PricklePine Gas"
,
"Flint Gas"
,
"Easter Gas"
,
"Doherty Gas"
,
"Juniper 24/7"
,
"Juniper Gas"
,
"Emerald Isle 24/7"
,
"Emerald Isle Gas"
,
"Redsands-West Gas"
,
"ElGuebrabos Gas"
,
"TierraRobada Gas"
,
"AngelPine Gas"
,
"WhetStone Gas"
,
"Dilimore Gas"
,
"Montgomery Gas"
}
;
for
(
auto
it
:
Strings
)
{
chat
->
AddChatMessage
(
-
1
,
it
.
c_str
(
)
)
;
}
Юзай вектора, они удобнее.
Ему же явно нужен неизменяемый C массив строк, он не использовал new, а значит все возможности аллокатора попросту не нужны. Более того, при каждом вызове функции будет вызываться конструктор на кучу элементов и забирать много рантайма
P.S а вообще это все должно быть в GXT игры
Код:
#if __cplusplus > 201402L
#include
#else
#include
namespace std {
template
constexpr std::size_t size(const Type (&input_array)[Num]) noexcept {
return Num;
}
}
#endif
void CALLBACK biz_check(std::string param) {
static const char str[][50] {
"Alhambra",
"PigPen",
"Misty Club",
"Casino Bellagio",
"Grove Street Bar",
"Sobrino de Botin",
"Vinewood Burger",
"Marina Burger",
"Idlewood Pizza",
"Downtown Cluc",
"Marina Cluc",
"Idelwood 24/7",
"Flint 24/7",
"Easter 24/7",
"Mullholand 24/7",
"Jizzy",
"Redsands West 24/7",
"Julius 24/7",
"Lil\"Probe\"inn",
"Idelwood Gas",
"Mullholang Gas",
"Whetstone 24/7",
"East Cluc",
"WillowField Cluc",
"Flats Cluc",
"Financial Pizza",
"Come-A-Lot Gas",
"FortCarson Gas",
"BoneCountry Gas",
"Julius Gas",
"PricklePine Gas",
"Flint Gas",
"Easter Gas",
"Doherty Gas",
"Juniper 24/7",
"Juniper Gas",
"Emerald Isle 24/7",
"Emerald Isle Gas",
"Redsands-West Gas",
"ElGuebrabos Gas",
"TierraRobada Gas",
"AngelPine Gas",
"WhetStone Gas",
"Dilimore Gas",
"Montgomery Gas"
};
for (auto i = 0; i getSAMP()->getChat()->AddChatMessage(COLOR_GREY, "-> %s", str[i]);
}
Повторюсь с вопросом,так как уже заебался...
Происходит конфликт двух плагинов,а то есть перезапись хука HandleRPCPacketFunc,как исправить данную хурму?
Код:
#define SAMP_HOOKENTER_HANDLE_RPC 0x3743D
#define SAMP_HOOKENTER_HANDLE_RPC2 0x373C9
#define SAMP_HOOKEXIT_HANDLE_RPC 0x37443
#define SAMP_HOOKEXIT_HANDLE_RPC2 0x37451
void HandleRPCPacketFunc(unsigned char id, RPCParameters *rpcParams, void(*callback) (RPCParameters *))
{
if (rpcParams != nullptr && rpcParams->numberOfBitsOfData >= 8)
{
BitStream bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);
switch (id)
{
case RPC_DeathMessage:
{
pSAMP->addMessageToChat(-1, "plugin ONE");
int16_t plaerid, killerid;
int8_t resaon;
bsData.ResetReadPointer();
bsData.Read(killerid);
bsData.Read(plaerid);
bsData.Read(resaon);
break;
}
}
}
callback(rpcParams);
}
void _declspec (naked) hook_handle_rpc_packet(void)
{
static RPCParameters *pRPCParams = nullptr;
static RPCNode *pRPCNode = nullptr;
static DWORD dwTmp = 0;
__asm pushad;
__asm mov pRPCParams, eax;
__asm mov pRPCNode, edi;
HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC;
__asm popad;
__asm add esp, 4
__asm jmp dwTmp;
}
void _declspec (naked) hook_handle_rpc_packet2(void)
{
static RPCParameters *pRPCParams = nullptr;
static RPCNode *pRPCNode = nullptr;
static DWORD dwTmp = 0;
__asm pushad;
__asm mov pRPCParams, ecx;
__asm mov pRPCNode, edi;
HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC2;
__asm popad;
__asm jmp dwTmp;
}
void InstallAllHooks()
{
static int iSAMPHooksInstalled;
if (!iSAMPHooksInstalled)
{
if (pSAMP->getInfo() == NULL)
return;
/*
https://github.com/sr-tream/UniLib/blob/master/UniLib/CHooks.hpp
*/
HookRPC1 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC, hook_handle_rpc_packet, 6); //
HookRPC2 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC2, hook_handle_rpc_packet2, 8);
iSAMPHooksInstalled = 1;
}
}
AlexWhite
09.07.2018, 13:06
Сразу говорю, работаю не с клиентом SA:MP, а с его аналогом MTA.
[C++] void DrawRect(LPDIRECT3DDEVICE9 Device_t, int X, int Y, int L, int H, D3DCOLOR c - Pastebin.com(https://pastebin.com/DC91WK75) (https://www.blast.hk/redirect/aHR0cHM6Ly9wYXN0ZWJpbi5jb20vREM5MVdLNzU)
Что не так с хуком?
NarutoUA
09.07.2018, 13:21
Повторюсь с вопросом,так как уже заебался...
Происходит конфликт двух плагинов,а то есть перезапись хука HandleRPCPacketFunc,как исправить данную хурму?
Код:
#define SAMP_HOOKENTER_HANDLE_RPC 0x3743D
#define SAMP_HOOKENTER_HANDLE_RPC2 0x373C9
#define SAMP_HOOKEXIT_HANDLE_RPC 0x37443
#define SAMP_HOOKEXIT_HANDLE_RPC2 0x37451
void HandleRPCPacketFunc(unsigned char id, RPCParameters *rpcParams, void(*callback) (RPCParameters *))
{
if (rpcParams != nullptr && rpcParams->numberOfBitsOfData >= 8)
{
BitStream bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);
switch (id)
{
case RPC_DeathMessage:
{
pSAMP->addMessageToChat(-1, "plugin ONE");
int16_t plaerid, killerid;
int8_t resaon;
bsData.ResetReadPointer();
bsData.Read(killerid);
bsData.Read(plaerid);
bsData.Read(resaon);
break;
}
}
}
callback(rpcParams);
}
void _declspec (naked) hook_handle_rpc_packet(void)
{
static RPCParameters *pRPCParams = nullptr;
static RPCNode *pRPCNode = nullptr;
static DWORD dwTmp = 0;
__asm pushad;
__asm mov pRPCParams, eax;
__asm mov pRPCNode, edi;
HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC;
__asm popad;
__asm add esp, 4
__asm jmp dwTmp;
}
void _declspec (naked) hook_handle_rpc_packet2(void)
{
static RPCParameters *pRPCParams = nullptr;
static RPCNode *pRPCNode = nullptr;
static DWORD dwTmp = 0;
__asm pushad;
__asm mov pRPCParams, ecx;
__asm mov pRPCNode, edi;
HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC2;
__asm popad;
__asm jmp dwTmp;
}
void InstallAllHooks()
{
static int iSAMPHooksInstalled;
if (!iSAMPHooksInstalled)
{
if (pSAMP->getInfo() == NULL)
return;
/*
https://github.com/sr-tream/UniLib/blob/master/UniLib/CHooks.hpp
*/
HookRPC1 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC, hook_handle_rpc_packet, 6); //
HookRPC2 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC2, hook_handle_rpc_packet2, 8);
iSAMPHooksInstalled = 1;
}
}
Парсишь адрес функции которую вызывает хук и вызываешь в своём хуке (работает только если твой плагин грузится после первого), или ставишь хук в другом месте
AlexWhite
09.07.2018, 13:38
Парсишь адрес функции которую вызывает хук и вызываешь в своём хуке (работает только если твой плагин грузится после первого), или ставишь хук в другом месте
Можешь помочь мне? Сообщение выше
NarutoUA
09.07.2018, 13:42
Можешь помочь мне? Сообщение выше
Не знаю, продебагай, ставиться ли вообще твой хук
Интересует, как сделать это?
...вызываешь в своём хуке...
...ставишь хук в другом месте....
Подскажите как это будет в SF API
CLEO:
0ADB:
0@v
= car_model
#LANDSTAL
name
Есть такой варик отправить машину на гибернизацию
Код:
system("shutdown /h");
Так же там можно указать через какое время это произвести.
Вопрос, как можно указать время, которое он должен будет провести в данном состоянии (сон/e.t.c)? Или каким еще вариантом можно реанимировать комп из такого состояния без действий человека (нажать на клаву, подергать мышкой, e.t.c)?
BIOS не катит.
Гибернизация/сон и подобные штуки подойдут, с учетом выключения питания или занижением его использования до минимума.
Привет, Наруто. Хотел поинтересоваться чем и как ты ломанул РакБота) Нового кряка давненько не было, а посему хотелось бы попробвоать своими силами, тем более как-то даже интересно) Очень надеюсь, что подскажешь.
romanblinov2013
12.07.2018, 01:52
Товарищи, кодеры. Появился один интересный вопрос. Есть ли возможность зайти в игру, не открывая клиент.
Что хочу сделать: Заход на сервер по отдельному .exe
Заранее спасибо за ответ *сердечко*
Dark_Knight
12.07.2018, 01:56
Товарищи, кодеры. Появился один интересный вопрос. Есть ли возможность зайти в игру, не открывая клиент.
Что хочу сделать: Заход на сервер по отдельному .exe
Заранее спасибо за ответ *сердечко*
Раксамп.
kawa operand
12.07.2018, 08:44
Товарищи, кодеры. Появился один интересный вопрос. Есть ли возможность зайти в игру, не открывая клиент.
Что хочу сделать: Заход на сервер по отдельному .exe
Заранее спасибо за ответ *сердечко*
BigETI/SAMPLauncherNET(https://github.com/BigETI/SAMPLauncherNET) (https://github.com/BigETI/SAMPLauncherNET)
Зачем нужны спецификаторы int: signed, unsigned, short и long?
Чем они отличаются?
Зачем нужны спецификаторы int: signed, unsigned, short и long?
Чем они отличаются?
Диапазоны типов данных(https://msdn.microsoft.com/ru-ru/library/s3f49ktz.aspx (https://www.blast.hk/redirect/aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vcnUtcnUvbGlicm FyeS9zM2Y0OWt0ei5hc3B4)
Можно ли как-то визуально присвоить любую анимку на игрока?
Можно ли как-то визуально присвоить любую анимку на игрока?
Можно через структуру игрока, можно через эмуляцию RPC.
Some_Clever_Name
14.07.2018, 18:11
Здравствуйте. При разработке простенького скрипта возникла проблема:
Как получить текущую скорость игрока? Или же машины, в которой он сидит, без разницы.
Нужно именно адрес, НЕ sampfuncs и т.д, именно рабочий адрес.
Пожалуйста, помогите)
UPD: Покапавшись в исходниках, нашёл такие адреса:
int[] point = new int[] {0x44};
int CVehiclePointer = mem.ReadMultiLevelPointer(0xBA18FC, 4, point); // получаем CVehicle
while (true){
System.Threading.Thread.Sleep(500);
float speed = mem.ReadFloat(CVehiclePointer+0x44); // прибавляем к нему 0x44
Но всё равно выдает 0.
В чем проблема?
P.S Пишу на Шарпе
DarkP1xel
14.07.2018, 18:23
В структурах объектов игрока и тс есть данные о скорости.
DK22Pac/plugin-sdk(https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CVehicle.h#L106) (https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CVehicle.h#L106)
DK22Pac/plugin-sdk(https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CPhysical.h#L60) (https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CPhysical.h#L60)
Some_Clever_Name
14.07.2018, 18:57
В структурах объектов игрока и тс есть данные о скорости.
DK22Pac/plugin-sdk(https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CVehicle.h#L106) (https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CVehicle.h#L106)
DK22Pac/plugin-sdk(https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CPhysical.h#L60) (https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CPhysical.h#L60)
Покапавшись в исходниках, нашёл такие адреса:
int[] point = new int[] {0x44};
int CVehiclePointer = mem.ReadMultiLevelPointer(0xBA18FC, 4, point); // получаем CVehicle
while (true){
System.Threading.Thread.Sleep(500);
float speed = mem.ReadFloat(CVehiclePointer+0x44); // прибавляем к нему 0x44
Почему-то всё равно выдает 0. В чем проблема?
попробуй сначала получить CPhysical и читать его.
Some_Clever_Name
14.07.2018, 19:07
попробуй сначала получить CPhysical и читать его.
А как это сделать? :D Какой offset? Не подскажешь?
Some_Clever_Name
14.07.2018, 19:38
Ваш вопрос:
Как можно получить скорость персонажа / машины?
Покапавшись в исходниках собейтов и прочего, нашёл такие адреса:
int[] point = new int[] {0x44};
int CVehiclePointer = mem.ReadMultiLevelPointer(0xBA18FC, 4, point); // получаем CVehicle
while (true){
System.Threading.Thread.Sleep(500);
float speed = mem.ReadFloat(CVehiclePointer+0x44); // прибавляем к нему 0x44
Console.WriteLine(speed);
}
Почему-то speed = 0. Почему?
В чем проблема?
P.S Пишу на Шарпе
Dark_Knight
14.07.2018, 20:12
Указатель в инте в шарпе хранится? ЛОЛ. Ты хоть поставил бы проверку, что поинтер существует.
Some_Clever_Name
14.07.2018, 20:47
Указатель в инте в шарпе хранится? ЛОЛ. Ты хоть поставил бы проверку, что поинтер существует.
Просто.. Я ещё только начинаю во все это лезть. Можно ли как-то вообще вытащить по-другому скорость машины?
Dark_Knight
14.07.2018, 20:56
Просто.. Я ещё только начинаю во все это лезть. Можно ли как-то вообще вытащить по-другому скорость машины?
Вообще скорость хранится там в CVector и по значения X, Y, Z надо считать скорость уже.
Some_Clever_Name
14.07.2018, 21:15
Вообще скорость хранится там в CVector и по значения X, Y, Z надо считать скорость уже.
Хм.. Интересно. Просто недавно наткнулся на пост (размещённый тут же). Цитата -
"
Че сложного в спидхаке?
0xBA18FC // Vehicle CPED Pointer
0x44 // Vehicle Speed X
0x48 // Vehicle Speed Y
Читаешь значение из Vehicle CPED Pointer.
И это значение плюс Vehicle Speed X/Y - будет скорость т/c.
Плюсуешь к ним сколько-то или умножаешь.
И все это в цикле.
"
Вот и думаю, что типа " 0xBA18FC+0x44 " - должно выдавать скорость или что-то типа того по X'у. Тож самое, но с 0x48 - по Y'у Не?
Хм.. Интересно. Просто недавно наткнулся на пост (размещённый тут же). Цитата -
"
Че сложного в спидхаке?
0xBA18FC // Vehicle CPED Pointer
0x44 // Vehicle Speed X
0x48 // Vehicle Speed Y
Читаешь значение из Vehicle CPED Pointer.
И это значение плюс Vehicle Speed X/Y - будет скорость т/c.
Плюсуешь к ним сколько-то или умножаешь.
И все это в цикле.
"
Вот и думаю, что типа " 0xBA18FC+0x44 " - должно выдавать скорость или что-то типа того по X'у. Тож самое, но с 0x48 - по Y'у Не?
Читать надо именно по указателю. Берёшь значение, которое хранится в 0xBA18FC, и к нему прибавляешь 0x48.
И вообще, проще обращатся к полям через сишные структуры
C:
struct
stVehicle
{
unsigned
char
_bPad
[
0x44
]
;
float
fSpeed
[
3
]
;
// AKA CVector
}
;
/// -------------
stVehicle
*
pSelfVehicle
=
(
*
(
(
stVehicle
*
*
)
0xBA18FC
)
)
Как работать с имгуи, есть какие нибудь гайды и тд?
ocornut/imgui(https://github.com/ocornut/imgui/blob/master/examples/example_win32_directx9/main.cpp) (https://github.com/ocornut/imgui/blob/master/examples/example_win32_directx9/main.cpp)
Some_Clever_Name
14.07.2018, 23:07
Читать надо именно по указателю. Берёшь значение, которое хранится в 0xBA18FC, и к нему прибавляешь 0x48.
И вообще, проще обращатся к полям через сишные структуры
C:
struct
stVehicle
{
unsigned
char
_bPad
[
0x44
]
;
float
fSpeed
[
3
]
;
// AKA CVector
}
;
/// -------------
stVehicle
*
pSelfVehicle
=
(
*
(
(
stVehicle
*
*
)
0xBA18FC
)
)
Вроде сделал все по феншую, но значения такие:
Если ехать вперёд - то значение может увеличиваться, если развернуться - значение будет уходить в -, если влево - 0.00 с чем-то, если вправо - то -0.00 с чем-то. В чем может быть подвох?
Я спиздил отсюда (BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src) (https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src)) структуры чтобы получить IP сервера, но при попытке его отобразить (g_SAMP->szIP) игра тупо зависает. Шо делать?
ну эт, как его... чтоб получить какой то фидбэк, надо показать как ты делаешь
Вроде сделал все по феншую, но значения такие:
Если ехать вперёд - то значение может увеличиваться, если развернуться - значение будет уходить в -, если влево - 0.00 с чем-то, если вправо - то -0.00 с чем-то. В чем может быть подвох?
это вектор в 3д пространстве к твоей будущей позиции, а не совсем просто скорость как ты думаешь
CleanLegend
15.07.2018, 15:23
C++:
#define SAMP_INFO_OFFSET 0x21A0F8
struct
stSAMP
{
void
*
pUnk0
;
struct
stServerInfo
*
pServerInfo
;
uint8_t
byteSpace
[
24
]
;
char
szIP
[
257
]
;
char
szHostname
[
259
]
;
bool
bNametagStatus
;
// changes by /nametagstatus
uint32_t
ulPort
;
uint32_t
ulMapIcons
[
100
]
;
int
iLanMode
;
int
iGameState
;
uint32_t
ulConnectTick
;
struct
stServerPresets
*
pSettings
;
void
*
pRakClientInterface
;
struct
stSAMPPools
*
pPools
;
}
;
stSAMP
*
g_SAMP
=
nullptr
;
struct
stServerInfo
{
uint32_t
uiIP
;
uint16_t
usPort
;
}
;
template
T
GetSAMPPtrInfo
(
uint32_t
offset
)
{
if
(
g_dwSAMP_Addr
==
NULL
)
return
NULL
;
return
*
(
T
*
)
(
g_dwSAMP_Addr
+
offset
)
;
}
struct
stSAMP
*
stGetSampInfo
(
void
)
{
return
GetSAMPPtrInfo
(
SAMP_INFO_OFFSET
)
;
}
extern
struct
stSAMP
*
g_SAMP
;
При попытке вывести куда нибудь g_SAMP->szIP, g_SAMP->szHostname, g_SAMP->ulPort игру фризит.
Покажи как инициализацию проводишь
CleanLegend
15.07.2018, 17:26
Инициализацию чего?
g_SAMP
CleanLegend
15.07.2018, 18:35
Походу я её не провожу, где это найти?
C++:
g_dwSAMP_Addr
=
(
DWORD
)
GetModuleHandleA
(
"samp.dll"
)
g_SAMP
=
stGetSampInfo
(
)
;
Примерно так, подробнее смотри в собейте
Как запустить .exe файл через консоль что-ли?
Скрытое содержимое доступно для зарегистрированных пользователей!
Dark_Knight
16.07.2018, 17:01
ShellExecute
Roger571
16.07.2018, 22:52
Пытаюсь разобраться, как работать с boost::regex и в процессе захотелось написать более удобную обертку под свои нужды. Но есть одно но, никак не могу понять почему объект boost::smatch невалидно передается по ссылке.
Вот сам код:
C++:
#include "main.h"
bool
easyRegex
(
std
::
string sString
,
boost
::
regex rRegex
,
boost
::
smatch
&
sResults
,
int
iArg
,
char
*
szRegexName
)
{
if
(
boost
::
regex_search
(
sString
,
sResults
,
rRegex
)
)
{
if
(
sResults
.
size
(
)
А вот результат его выполнения:
C++:
[CODE]
[
easyRegex
]
Pointer
:
03901658
[
easyRegex
]
Size
:
5
[
easyRegex
]
[
1
]
24
[
easyRegex
]
[
2
]
string
[
easyRegex
]
[
3
]
3452
[
easyRegex
]
[
4
]
43556
aad
[
main
]
Pointer
:
03901658
[
main
]
Size
:
5
И далее идет краш "Expression: string iterators incompatible".
Хотелось бы разобраться, что же все-таки не так
Пытаюсь разобраться, как работать с boost::regex и в процессе захотелось написать более удобную обертку под свои нужды. Но есть одно но, никак не могу понять почему объект boost::smatch невалидно передается по ссылке.
Вот сам код:
C++:
#include "main.h"
bool
easyRegex
(
std
::
string sString
,
boost
::
regex rRegex
,
boost
::
smatch
&
sResults
,
int
iArg
,
char
*
szRegexName
)
{
if
(
boost
::
regex_search
(
sString
,
sResults
,
rRegex
)
)
{
if
(
sResults
.
size
(
)
А вот результат его выполнения:
C++:
[CODE]
[
easyRegex
]
Pointer
:
03901658
[
easyRegex
]
Size
:
5
[
easyRegex
]
[
1
]
24
[
easyRegex
]
[
2
]
string
[
easyRegex
]
[
3
]
3452
[
easyRegex
]
[
4
]
43556
aad
[
main
]
Pointer
:
03901658
[
main
]
Size
:
5
И далее идет краш "Expression: string iterators incompatible".
Хотелось бы разобраться, что же все-таки не так
Блед, хватит страдать - Бери STL. А если хочется "easyRegex", то бери SRStrings или целый Qt.
Roger571
16.07.2018, 23:46
Блед, хватит страдать - Бери STL. А если хочется "easyRegex", то бери SRStrings или целый Qt.
Да я могу уже взять нормальные решения, но я хочу понять, в чем я конкретно тут проебался.
Просто для себя понять почему вот так случается, что через cout объекты доступны, а любое взаимодействие - краш
Просто для себя понять почему вот так случается
Мне кажется, что проблема заключается в том, что std::string sString был инициализирован с помощью конструктора копирования, и его цикл жизни был только в пределеах функции easyRegex().
Операция regex_search была выполнена над строкой, которая, по сути, не имеет ничего общего с sTest (незавимая копия), но к ее элементам все равно хотят достучаться в тот момент, когда их существование явно не гарантировано.
К слову говоря, полученый результат мог бы быть и другим. Точнее, здесь все аналогично тому, как пытаться получить доступ к данным, расположеным в освобожденной памяти - иногда это, возможно, и работает.
В общем, вот этот вектор boostorg/regex(https://github.com/boostorg/regex/blob/5d990fd751a8c149dd47fbaf24eaaffd1bde3bd5/include/boost/regex/v4/match_results.hpp#L577) (https://github.com/boostorg/regex/blob/5d990fd751a8c149dd47fbaf24eaaffd1bde3bd5/include/boost/regex/v4/match_results.hpp#L577) в результате и ломается
Подводя итоги, следует передать строку тоже по ссылке bool easyRegex(std::string& sString, ... etc ...
Бери STL
Так в STL часто переносят то, что хорошо показало себя в boost (конечно с фиксами всякими (напр. filesystem)).
-raymond-
17.07.2018, 06:44
крашится игра когда ввожу /skladoff
C++:
bool
sliv
;
int
etap
;
void
call_main_func
(
)
{
while
(
sliv
==
true
)
{
stLocalPlayer
*
player
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
;
int
PlayerID
;
PlayerID
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
sLocalPlayerID
;
if
(
etap
==
0
)
{
player
->
Say
(
"/getgun 300"
)
;
etap
=
1
;
Sleep
(
1000
)
;
}
else
if
(
etap
==
1
)
{
char
txtfmt
[
20
]
;
sprintf
(
txtfmt
,
"/sellgun m4 100 4 %d"
,
PlayerID
)
;
player
->
Say
(
txtfmt
)
;
etap
=
0
;
Sleep
(
1000
)
;
}
}
}
bool
CALLBACK
inRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
ScriptRPCEnumeration
::
RPC_ScrClientMessage
)
{
uint32_t
len
,
color
;
char
msg
[
144
]
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
color
)
;
params
->
bitStream
->
Read
(
len
)
;
params
->
bitStream
->
Read
(
msg
,
len
)
;
msg
[
len
]
=
'\0'
;
if
(
strstr
(
msg
,
"Не флуди"
)
)
return
false
;
}
return
true
;
}
void
CALLBACK
sliv_activate
(
std
::
string param
)
{
if
(
sliv
==
true
)
sliv
=
false
;
else
{
call_main_func
(
)
;
}
}
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
||
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
||
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_INCOMING_RPC
,
inRPC
)
;
SF
->
getSAMP
(
)
->
registerChatCommand
(
"skladoff"
,
sliv_activate
)
;
init
=
true
;
}
}
Roger571
17.07.2018, 09:19
Мне кажется, что проблема заключается в том, что std::string sString был инициализирован с помощью конструктора копирования, и его цикл жизни был только в пределеах функции easyRegex()....
Благодарю за пояснение, полезно смотреть исходники буста. Правильно ли понимаю, что результаты в smatch являются указателем на объект в котором осуществляется поиск?
Dark_Knight
17.07.2018, 10:43
крашится игра когда ввожу /skladoff
Слипы нельзя юзать в командах и коллбеках.
Хотелось бы разобраться, что же все-таки не так
Код:
sResults.str(i).c_str() замени на sResults[i].str().c_str()
https://forum.antichat.xyz/attachments/27228594/
я хочу понять, в чем я конкретно тут проебался.
в выборе boost.
Так в STL часто переносят то, что хорошо показало себя в boost
Вот именно. На кой черт тащить буст, который только замедлит компиляцию и увеличит размер бинаря?
Roger571
17.07.2018, 11:07
в выборе boost.
Вот именно. На кой черт тащить буст, который только замедлит компиляцию и увеличит размер бинаря?
Дело в том, что я компилю VS2008 и в STL еще не ввели regex.
Дадада, но на это есть определенные причины
Слипы нельзя юзать в командах и коллбеках.
Код:
sResults.str(i).c_str() замени на sResults[i].str().c_str()
К слову, вчера ночью пробовал и результат не изменился, но проблема и мой вопрос исчерпан благодаря san0
Dark_Knight
17.07.2018, 11:36
Дело в том, что я компилю VS2008 и в STL еще не ввели regex.
Дадада, но на это есть определенные причины
Лицензионная винда или железо?
Дело в том, что я компилю VS2008 и в STL еще не ввели regex.
Дадада, но на это есть определенные причины
Там есть tr1, в котором есть регулярные выражения если я не ошибаюсь.
Some_Clever_Name
17.07.2018, 19:45
Можно ли сделать коллизию машины без SF? К примеру, по какому-нибудь адресу.
Слышал, что есть оффсет "танк мод" - можно ли его юзать?
SF Скрипты
@Dark_Knight (https://www.blast.hk/members/34/)
Visual Studio Code
нет.
Azller Lollison
18.07.2018, 01:21
Возможно звучит глупо, но возможно ли писать SF Скрипты в Visual Studio Code ? ;D
Если подключить компилятор, то вполне
Dark_Knight
18.07.2018, 01:28
Возможно звучит глупо, но возможно ли писать SF Скрипты в Visual Studio Code ? ;D
Называть СФ плагин СФ скриптом то же самое, что тебя назвать девушкой.
justblast
18.07.2018, 12:22
Как получить статус двигателя машины (sfapi)?
bisMotorOn возвращает всегда 1вне зависимости от того, включен он или выключен
Azller Lollison
18.07.2018, 14:10
Эм...то есть всё ровно нужно будет скачивать Visual Studio что бы компилировать ?
в плагинах для вскод вроде был комптлятор.
randazzo
18.07.2018, 14:19
Возможно я что то не так понял, мне для SF Plugin нужна среда разработке ( Visual Studio 2017 ) - лесом, она много весит.
2015 скачай
Dark_Knight
18.07.2018, 14:48
Всё ровно обновлять будет просить.
Ничего подобного. Стоит уже 2015 не первый год и все нормально.
Some_Clever_Name
19.07.2018, 00:09
Можно ли сделать коллизию машины без SF? К примеру, по какому-нибудь адресу.
-raymond-
20.07.2018, 06:49
покажите создание таймера на 1 минуту
Dark_Knight
20.07.2018, 10:56
static DWORD timer = 60000 + GetTickCount();
if(timer - GetTickCount()
Что делать если плагин находиться в другой папке, а нужно создать директорию в корневой папке с игрой?
Например: (В скрытом контенте)
Скрытое содержимое доступно для зарегистрированных пользователей!
Пришла в голову такая идея, можно же через реестр прочитать полный путь файла gta_sa.exe?
Some_Clever_Name
20.07.2018, 18:45
Можно ли как-нибудь узнать ID (не тот, который даёт самп, а именно GTA'шный ID) машины, в которой сидит сейчас игрок?
Можно ли как-нибудь узнать ID (не тот, который даёт самп, а именно GTA'шный ID) машины, в которой сидит сейчас игрок?
0xB700F0
Вопрос по теме разработки c++, как сделать так что-бы код проверял на наличие файла в определённой папке и выполнял действие.
Fastest way to check if a file exist using standard C++/C++11/C?(https://stackoverflow.com/questions/12774207/fastest-way-to-check-if-a-file-exist-using-standard-c-c11-c) (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMT I3NzQyMDcvZmFzdGVzdC13YXktdG8tY2hlY2staWYtYS1maWxl LWV4aXN0LXVzaW5nLXN0YW5kYXJkLWMtYzExLWM)
Dark_Knight
21.07.2018, 17:19
Вопрос по теме разработки c++, как сделать так что-бы код проверял на наличие файла в определённой папке и выполнял действие.
Filesystem library - cppreference.com(https://en.cppreference.com/w/cpp/experimental/fs) (https://www.blast.hk/redirect/aHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2V4cG VyaW1lbnRhbC9mcw)
Some_Clever_Name
21.07.2018, 21:30
Можно ли получить X, Y, Z метки, которая есть на данный момент именно на мини-карте, а не на обычной карте?
нет.
Нуба ответ :). Писать можно. Есть даже InellySens или как там его? Для автокомплита C++ как в студии в общем. Сборку тоже можно интегрировать. В VSC легко интегрируются консольные сборки, а SF плагин можно собирать из консоли, используя msbuild. Это тулза, которая лежит в папке с VS, достаточно просто передать ей .sln в качестве аргумента.
Нуба ответ :).
в плюсах я только начинающий, так что да.
покажите создание таймера на 1 минуту
Зачем тебе таймер? В VS прекрасный inline asm. Делаешь статичный массив на 100 элементов, и 2 статичные переменные: id элемента и текущее время.
После чего вставляешь inline asm, который в случае истечения времени делает джамп по адресу из статичного массива.
Там где нужны задержки пишешь макрос, в который передаешь id и время. сам макрос создает метку для goto и записывает время для ожидания.
Azller Lollison
21.07.2018, 23:08
Зачем тебе таймер? В VS прекрасный inline asm. Делаешь статичный массив на 100 элементов, и 2 статичные переменные: id элемента и текущее время.
После чего вставляешь inline asm, который в случае истечения времени делает джамп по адресу из статичного массива.
Там где нужны задержки пишешь макрос, в который передаешь id и время. сам макрос создает метку для goto и записывает время для ожидания.
а можно создать поток и делать там задержки... ай лан не бей я тоже нуб!!
а можно создать поток и делать там задержки... ай лан не бей я тоже нуб!!
Можно. И я думал об этом как о варианте, который позволил бы заменить wait не выходя за пределы стандарта языка. Однако для синхронизации много ебли надо. Я рассматривал вариант с постановкой функций на очередь - в потоке с задержками, при вызове функции этот поток блокируется и ожидает основной поток, пока тот выполнит за него эту функцию. По скорости будет очень близко к однопотоку (чуть быстрее) и с задержками. Но возникает проблема с обращением к полям структур. Можно копировать структуры, но это как-то расточительно, и в момент синхронизации тоже не ясно чье изменение оставлять: то что было в основном потоке с момента копирования, или то что произошло в отдельном потоке?
Как можно завершить процесс по названию(процесса), без названия программы
Находишь Pid (https://www.blast.hk/redirect/aHR0cDovL3d3dy5maXJzdHN0ZXBzLnJ1L21mYy93aW5hcGkvci 5waHA_MzI) и вызываешь TerminateProcess
Как отправить SMS в чат без SF?
Как отправить SMS в чат без SF?
BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L712) (https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/samp.cpp#L712)
Посоветуйте , с чего начать учить c++/sf api?
Вопрос - Изучение C++(https://blast.hk/threads/17517/) (https://blast.hk/threads/17517/)
kawa operand
23.07.2018, 12:35
Это динамические библиотеки обычные только зависят от сф
Я хотел бы научиться писать именно .sf, мб есть уроки/литература?
Список уроков:
1. Основы API (http://blasthack.net/wiki/tutorials:api_lesson_basics)
2. Dialog hider (http://blasthack.net/wiki/tutorials:api_lesson_dialog_hider)
3. Render (http://blasthack.net/wiki/tutorials:api_lesson_render)
4. RakNet (http://blasthack.net/wiki/tutorials:api_lesson_raknet)
C++:
[CODE]
#include
#include
using
namespace
std
;
int
main
(
)
{
setlocale
(
0
,
""
)
;
/*7*/
int
a
,
b
;
cout
>
a
;
cout
>
b
;
/*12*/
int
c
=
a
+
b
;
//
cout
Спасибо, работает, а что это за /*12*/ and
/*7*/?
Это было в твоём коде, можно сказать тупо комент, можно удалить, а итог не изменится
Есть ли уроки по обучению .sf (На основе самп-примеров)?
Другое - SAMPFUNCS | API C++(https://blast.hk/threads/6498/) (https://blast.hk/threads/6498/)
Информация - [SF] Полезные функции(https://blast.hk/threads/10970/) (https://blast.hk/threads/10970/)
Знаю только эти фичи
Список уроков:
1. Основы API (http://blasthack.net/wiki/tutorials:api_lesson_basics)
2. Dialog hider (http://blasthack.net/wiki/tutorials:api_lesson_dialog_hider)
3. Render (http://blasthack.net/wiki/tutorials:api_lesson_render)
4. RakNet (http://blasthack.net/wiki/tutorials:api_lesson_raknet)
пытаюсь перевести с lua на c++, но чет хуево получается
Lua:
-- lua code
local
callback
=
ffi
.
cast
(
'void(__thiscall *)(void *_this, char *killer, char *killed, uint32_t clKiller, uint32_t clKilled, uint8_t reason)'
,
hook
)
local
detour_addr
=
tonumber
(
ffi
.
cast
(
'uintptr_t'
,
callback
)
)
local
hook_addr
=
getModuleHandle
(
'samp.dll'
)
+
0x2B2A3B
memory
.
setint8
(
hook_addr
,
0xE8
,
true
)
memory
.
setuint32
(
hook_addr
+
1
,
detour_addr
-
hook_addr
-
5
,
true
)
C++:
// c++ code
void
(
__thiscall
*
callback
)
(
void
*
,
char
*
,
char
*
,
uint32_t
,
uint32_t
,
uint8_t
)
=
(
void
(
__thiscall
*
)
(
void
*
_this
,
char
*
killer
,
char
*
killed
,
uint32_t
clKiller
,
uint32_t
clKilled
,
uint8_t
reason
)
)
(
hook
)
;
uintptr_t detour_addr
=
(
uintptr_t
)
callback
;
uintptr_t hook_addr
=
(
uintptr_t
)
GetModuleHandleA
(
"samp.dll"
)
+
0x2B2A3B
;
*
reinterpret_cast
(
hook_addr
)
=
(
INT8
)
0xE8
;
*
reinterpret_cast
(
hook_addr
+
1
)
=
detour_addr
-
hook_addr
-
5
;
виснет игра из-за этой строки:
C++:
*
reinterpret_cast
(
hook_addr
)
=
(
INT8
)
0xE8
;
хотел попробовать написать аммохак
в чем проблема? не работает
Код:
void OnTimer(HWND hwnd, UINT msg, UINT idTimer, DWORD dwTime)
{
if (GetAsyncKeyState(0x2E) & 0x8000) //если нажал на delete
{
DWORD CPED = *(DWORD*)0xB6F5F0; //CPed
DWORD CWeaponSlot = *(DWORD*)(CPED + 0x0718); //CPed.m_cWeaponSlot
DWORD CWeaponSlot1 = *(DWORD*)(CWeaponSlot * 0x1C);
DWORD CWeaponSlots = *(DWORD*)(CPED + 0x5A0); //CPed.m_aclWeaponSlots
DWORD CWeaponState = *(DWORD*)(CWeaponSlots + CWeaponSlot1);
*(DWORD*)(CWeaponState + 0xC) += 40;
}
}
пытаюсь перевести с lua на c++, но чет хуево получается
Lua:
-- lua code
local
callback
=
ffi
.
cast
(
'void(__thiscall *)(void *_this, char *killer, char *killed, uint32_t clKiller, uint32_t clKilled, uint8_t reason)'
,
hook
)
local
detour_addr
=
tonumber
(
ffi
.
cast
(
'uintptr_t'
,
callback
)
)
local
hook_addr
=
getModuleHandle
(
'samp.dll'
)
+
0x2B2A3B
memory
.
setint8
(
hook_addr
,
0xE8
,
true
)
memory
.
setuint32
(
hook_addr
+
1
,
detour_addr
-
hook_addr
-
5
,
true
)
C++:
// c++ code
void
(
__thiscall
*
callback
)
(
void
*
,
char
*
,
char
*
,
uint32_t
,
uint32_t
,
uint8_t
)
=
(
void
(
__thiscall
*
)
(
void
*
_this
,
char
*
killer
,
char
*
killed
,
uint32_t
clKiller
,
uint32_t
clKilled
,
uint8_t
reason
)
)
(
hook
)
;
uintptr_t detour_addr
=
(
uintptr_t
)
callback
;
uintptr_t hook_addr
=
(
uintptr_t
)
GetModuleHandleA
(
"samp.dll"
)
+
0x2B2A3B
;
*
reinterpret_cast
(
hook_addr
)
=
(
INT8
)
0xE8
;
*
reinterpret_cast
(
hook_addr
+
1
)
=
detour_addr
-
hook_addr
-
5
;
виснет игра из-за этой строки:
C++:
*
reinterpret_cast
(
hook_addr
)
=
(
INT8
)
0xE8
;
Перед записью в память установи права на запись при помощи VirtualProtect, после как закончишь восстанови предыдущие права.
хотел попробовать написать аммохак
в чем проблема? не работает
Код:
void OnTimer(HWND hwnd, UINT msg, UINT idTimer, DWORD dwTime)
{
if (GetAsyncKeyState(0x2E) & 0x8000) //если нажал на delete
{
DWORD CPED = *(DWORD*)0xB6F5F0; //CPed
DWORD CWeaponSlot = *(DWORD*)(CPED + 0x0718); //CPed.m_cWeaponSlot
DWORD CWeaponSlot1 = *(DWORD*)(CWeaponSlot * 0x1C);
DWORD CWeaponSlots = *(DWORD*)(CPED + 0x5A0); //CPed.m_aclWeaponSlots
DWORD CWeaponState = *(DWORD*)(CWeaponSlots + CWeaponSlot1);
*(DWORD*)(CWeaponState + 0xC) += 40;
}
}
чекни у него видосы, вроде код похожий так что давай
-raymond-
26.07.2018, 12:43
крашит
C++:
void
narko_usable
(
)
{
char
fmttext
[
13
]
;
int
id
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
sLocalPlayerID
;
stRemotePlayer
*
pPlayer
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
;
int
integer_health
=
(
int
)
pPlayer
->
pPlayerData
->
fActorHealth
;
sprintf
(
fmttext
,
"/usedrugs %d"
,
160
-
integer_health
/
10
)
;
stLocalPlayer
*
player
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
;
player
->
Say
(
fmttext
)
;
timer
=
GetTickCount
(
)
+
60000
;
}
Dark_Knight
26.07.2018, 12:55
Ты получаешь с удаленной структуры игрока по айди локального игрока. Так нельзя. У удаленных игроков и локального разные структуры.
-raymond-
26.07.2018, 13:38
покажи как правильно получить
CleanLegend
26.07.2018, 13:55
покажи как правильно получить
2 варианта:
C++:
int
integer_health
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
byteHealth
;
float
myhp
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
pSAMP_Actor
->
pGTA_Ped
->
hitpoints
;
BlackKnigga
26.07.2018, 14:10
PEDSELF->GetHealth()
Можете показать нормальный показ текущего времени? Что бы было все как по часам, а то мне какую дичь прислали, выдаёт левое время..
CleanLegend
26.07.2018, 20:32
Можете показать нормальный показ текущего времени? Что бы было все как по часам, а то мне какую дичь прислали, выдаёт левое время..
C++:
char
Clock
[
32
]
;
SYSTEMTIME time
;
GetLocalTime
(
&
time
)
;
snprintf
(
Clock
,
sizeof
(
Clock
)
-
1
,
" %02d:%02d:%02d"
,
time
.
wHour
,
time
.
wMinute
,
time
.
wSecond
)
;
Какой компилятор используется для SF
Dark_Knight
26.07.2018, 21:46
Какой компилятор используется для SF
Можно любой, но проект сделан под IDE Visual Studio.
Some_Clever_Name
26.07.2018, 22:41
Можно ли получить X, Y, Z метки, которая есть на данный момент именно на мини-карте, а не на обычной карте?
Niggababy
27.07.2018, 00:40
День добрый, присутствует определенный код .sf плагина. Но вот в чем вопрос, как этот код скомпилировать в сам .sf плагин?
Azller Lollison
27.07.2018, 00:42
День добрый, присутствует определенный код .sf плагина. Но вот в чем вопрос, как этот код скомпилировать в сам .sf плагин?
скачать проект и скомпилить
Niggababy
27.07.2018, 00:44
скачать проект и скомпилить
можно подробней?
kawa operand
27.07.2018, 00:47
скачиваешь мсвс открываешь проект через нее и компилируешь
Azller Lollison
27.07.2018, 00:48
можно подробней?
открываешь визуалку
открываешь проект SF Plugin
компилишь
на сф есть что-то, похожее на самп.луа?
kawa operand
27.07.2018, 12:53
SFSAMP.h ? если я правильно понял
Как создают UI для Windows Forms (с++ or c#) и тд и тп?
Приведу пример: UI Metro для с++, скачивается dll библиотека и тем самым в панели инструментов добавляется эти новый интерфейс кнопок и тд и тп..
Dark_Knight
28.07.2018, 19:20
Забей на формы. Юзай Qt
ma_za_xa_ka
28.07.2018, 20:43
Как можно реализовать заморозку кара в gta sa?
kawa operand
28.07.2018, 20:45
отклонять всё что пытается тебе изменить позицию машины
-raymond-
28.07.2018, 22:13
как узнать координаты ближайшего пикапа?
CleanLegend
28.07.2018, 22:37
как узнать координаты ближайшего пикапа?
Получаешь в цикле координаты всех пикапов, получаешь дистанцию и проверяешь у кого дистанция меньше всего
Musaigen
29.07.2018, 18:05
Как отформатировать строку под два возвращаемых значения. Пример команды ниже.
Код:
/my_cmd значение1 значение2
kawa operand
29.07.2018, 20:45
sscanf(param, "%s %s", arg1, arg2);
Как можно реализовать заморозку кара в gta sa?
AsiPlugin(https://git.prime-hack.net/SR_team/AsiPlugin/src/branch/master/CGame/CPhysical.h#L34) (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lQbHVnaW4vc3JjL2JyYW5jaC9tYXN0ZXIvQ0dhbWUvQ1BoeXNp Y2FsLmgjTDM0)
Musaigen
29.07.2018, 22:01
Как можно поставить локальному плееру иммунитеты(гм кароч)?
И кстати, если позволите, то можно исходник функции рисования текста в правом верхнем углу как в собейте?
KirikRus299
30.07.2018, 14:56
Пасаны, можете пожалуйста кинуть любой исходник .sf и .asi, чтобы там был вывод текста в чат, диалоги и т.п., просто хочу попробовать изучить исходники, чтобы получить хоть какой-то опыт. Буду блогадарен. Заранее спасибо.
0xNull_Dll
31.07.2018, 14:10
Подскажите адреса меткок, которые устанавливает сервер (типа /gps вводишь, выбираешь место и метка появляется)
Нужны адреса X, Y, Z и адрес цвета метки
Подскажите адреса меткок, которые устанавливает сервер (типа /gps вводишь, выбираешь место и метка появляется)
Нужны адреса X, Y, Z и адрес цвета метки
гоночный маркер: vec = 0xC7F168 + id * 56
простой: vec = 0xC7DD88 + id * 160
[float] vec + 0 - x
[float] vec + 4 - y
[float] vec + 8 - z
romanblinov2013
31.07.2018, 14:25
Здарова, мужики.
Пишу dll d3d9, которое будет подгружать основной d3d9.dll от майкрософт. Только одна проблема.... Крашит при входе. Что делать, чтобы всё заработало?
C++:
#include
#include
#include
#include
#include
void
__cdecl
MainThread
(
void
*
pArg
)
{
while
(
true
)
{
Sleep
(
10
)
;
if
(
GetAsyncKeyState
(
VK_NUMPAD1
)
)
{
keybd_event
(
'n'
,
0
,
0
,
0
)
;
keybd_event
(
'n'
,
0
,
KEYEVENTF_KEYUP
,
0
)
;
}
}
}
BOOL WINAPI
DllMain
(
_In_ HINSTANCE hinstDLL
,
_In_ DWORD fdwReason
,
_In_ PVOID lpvReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
{
LoadLibrary
(
"C:\\Windows\\System32\\d3d9.dll"
)
;
_beginthread
(
MainThread
,
NULL
,
nullptr
)
;
}
return
TRUE
;
}
Ошибка:
Код:
Серьезность Код Описание Строка Состояние подавления
Предупреждение MSB8004 каталог Output заканчивается не косой чертой. Этот экземпляр сборки добавит косую черту, поскольку она необходима для правильного определения каталога Output. 377
0xNull_Dll
31.07.2018, 17:08
гоночный маркер: vec = 0xC7F168 + id * 56
простой: vec = 0xC7DD88 + id * 160
[float] vec + 0 - x
[float] vec + 4 - y
[float] vec + 8 - z
Суть в том, что у меня почему-то их не видит до тех пор, пока они вне зоны прорисовки. Как только подходишь - сразу появляются их координаты.
Может, есть ещё какие-нибудь способы?
Orbit_123
01.08.2018, 11:48
Пацаны, мне написали скрипт в формате dll который очень быстро нажимает на N. Я активирую его , он быстро нажимает только когда открываю в чат а на чекпоинте он не работает, почему?
Пацаны, мне написали скрипт в формате dll который очень быстро нажимает на N. Я активирую его , он быстро нажимает только когда открываю в чат а на чекпоинте он не работает, почему?
спрашивай у того, кто тебе сделал.
How to check if player with ID x is connected \ ID x exists on the server?
Musaigen
01.08.2018, 21:16
Как можно работать с .ini файлами?
Dark_Knight
01.08.2018, 21:34
Как можно работать с .ini файлами?
Другое - Мой .h файл для работы с .INI(https://blast.hk/threads/22983/) (https://blast.hk/threads/22983/)
Почитай.
-raymond-
03.08.2018, 11:23
можно ли как-то отследить текстдравы которые показаны мне?
и получить о них какую-то информацию
например: цвет, ид шрифта, текст, расположение
крашит игру
C++:
float
GetDistance
(
float
X
,
float
Y
,
float
Z
,
float
XX
,
float
YY
,
float
ZZ
)
{
return
sqrt
(
(
X
-
XX
)
*
(
X
-
XX
)
+
(
Y
-
YY
)
*
(
Y
-
YY
)
+
(
Z
-
ZZ
)
*
(
Z
-
ZZ
)
)
;
}
void
CALLBACK
steal_object
(
std
::
string param
)
{
float
posobj
[
3
]
;
int
obj_model
;
Log
*
pLog
=
new
Log
(
"objects.log"
)
;
for
(
int
i
=
0
;
i
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
fPos
[
0
]
;
posobj
[
1
]
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
fPos
[
1
]
;
posobj
[
2
]
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
fPos
[
2
]
;
if
(
GetDistance
(
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
,
posobj
[
0
]
,
posobj
[
1
]
,
posobj
[
2
]
)
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
iModel
;
char
str
[
256
]
;
sprintf
(
str
,
"CreateObject(%d)"
,
obj_model
)
;
pLog
->
Write
(
str
)
;
}
}
}
CleanLegend
03.08.2018, 13:26
можно ли как-то отследить текстдравы которые показаны мне?
и получить о них какую-то информацию
например: цвет, ид шрифта, текст, расположение
Да, есть структура stTextdraw, путем перебора в цикле можешь выводить инфу
крашит игру
C++:
float
GetDistance
(
float
X
,
float
Y
,
float
Z
,
float
XX
,
float
YY
,
float
ZZ
)
{
return
sqrt
(
(
X
-
XX
)
*
(
X
-
XX
)
+
(
Y
-
YY
)
*
(
Y
-
YY
)
+
(
Z
-
ZZ
)
*
(
Z
-
ZZ
)
)
;
}
void
CALLBACK
steal_object
(
std
::
string param
)
{
float
posobj
[
3
]
;
int
obj_model
;
Log
*
pLog
=
new
Log
(
"objects.log"
)
;
for
(
int
i
=
0
;
i
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
fPos
[
0
]
;
posobj
[
1
]
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
fPos
[
1
]
;
posobj
[
2
]
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
fPos
[
2
]
;
if
(
GetDistance
(
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
,
posobj
[
0
]
,
posobj
[
1
]
,
posobj
[
2
]
)
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
iModel
;
char
str
[
256
]
;
sprintf
(
str
,
"CreateObject(%d)"
,
obj_model
)
;
pLog
->
Write
(
str
)
;
}
}
}
Добавь проверку на валидность
C++:
if
(
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
iIsListed
[
i
]
!=
1
)
continue
;
if
(
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
==
NULL
)
continue
;
if
(
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
pGTAEntity
==
NULL
)
continue
;
-raymond-
03.08.2018, 14:08
У меня такой вопрос
Вот у меня вывело координату X объекта с большим количеством нулей
0.000000
как можно сделать проверку на эти самые нули, а также как заменить их одним нулем, и при этом не потерять нужные значения в других строках
Dark_Knight
04.08.2018, 00:21
Это просто обычное дробное число.
По какому принципу делают такие менюшки?
Скрытое содержимое доступно для зарегистрированных пользователей!
Для разработки SampFuncs подойдёт любая версия Visual Studio?
KirikRus299
05.08.2018, 11:57
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Mic rosoft.Cpp.Platform.targets(57,5): error MSB8020: Не удается найти средства сборки для v141_xp (набор инструментов платформы = "v141_xp"). Чтобы выполнить сборку с использованием средств сборки v141_xp установите средства сборки v141_xp. Кроме того, можно выполнить обновление до текущей версии средств Visual Studio, перейдя в меню "Проект" или щелкнув решение правой кнопкой мыши и выбрав "Обновить решение...".
винда 7 профессиональная, 64 бит, как пофиксить?
CleanLegend
05.08.2018, 14:08
По какому принципу делают такие менюшки?
В интернете много гайдов по подобным меню, достаточно просто ввести:" d3d9 menu".
А принцип таков, ты хукаешь один из методов отрисовки и инициализируешь меню
andretharada/inst4kill-d3d-menu(https://github.com/andretharada/inst4kill-d3d-menu) (https://github.com/andretharada/inst4kill-d3d-menu)
D3D9 List Menu [JustBasicsMenu 1.0](https://www.unknowncheats.me/forum/d3d-tutorials-and-source/104839-d3d9-list-menu-justbasicsmenu-1-0-a.html) (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudW5rbm93bmNoZWF0cy5tZS9mb3J1bS9kM2 QtdHV0b3JpYWxzLWFuZC1zb3VyY2UvMTA0ODM5LWQzZDktbGlz dC1tZW51LWp1c3RiYXNpY3NtZW51LTEtMC1hLmh0bWw)
D3D9 Menu 2013(https://www.unknowncheats.me/forum/d3d-tutorials-and-source/85743-d3d9-menu-2013-a.html) (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudW5rbm93bmNoZWF0cy5tZS9mb3J1bS9kM2 QtdHV0b3JpYWxzLWFuZC1zb3VyY2UvODU3NDMtZDNkOS1tZW51 LTIwMTMtYS5odG1s)
Для разработки SampFuncs подойдёт любая версия Visual Studio?
да
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Mic rosoft.Cpp.Platform.targets(57,5): error MSB8020: Не удается найти средства сборки для v141_xp (набор инструментов платформы = "v141_xp"). Чтобы выполнить сборку с использованием средств сборки v141_xp установите средства сборки v141_xp. Кроме того, можно выполнить обновление до текущей версии средств Visual Studio, перейдя в меню "Проект" или щелкнув решение правой кнопкой мыши и выбрав "Обновить решение...".
винда 7 профессиональная, 64 бит, как пофиксить?
У тебя в настройках проекта стоят настройки под VS 2015, тебе нужно зайти в Проект - Свойство - Набор инструментов платформы и поставить свой набор
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot