PDA

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


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

Неадекватная сова
11.01.2019, 21:12
Попытался сделать получение координат кости и рисовать на них, но чё то не то

C++:






#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include
#include
#include
#include
#define FUNC_IsVisible 0x536BC0
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
bool
CALLBACK
Present
(
CONST RECT
*
pSourceRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindowOverride
,
CONST RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
)
// если рендерер готов к рисованию
{
for
(
int
i
=
0
;
i

getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
;
CPed
*
Ped
=
GAME
->
GetPools
(
)
->
GetPed
(
(
DWORD
*
)
actorInfo
)
;
float
posX
[
15
]
,
posY
[
15
]
;
int
counter
=
0
;
CVector vPos
[
15
]
;
for
(
int
i
=
1
;
i

GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
3
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
4
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
5
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
6
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
22
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
23
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
25
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
32
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
33
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
35
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
42
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
43
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
52
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
case
53
:
Ped
->
GetTransformedBonePosition
(
(
eBone
)
i
,
&
vPos
[
counter
]
)
;
counter
++
;
}
}
if
(
Ped
->
IsOnScreen
(
)
)
{
for
(
int
i
=
0
;
i

getGame
(
)
->
convert3DCoordsToScreen
(
vPos
[
i
]
.
fX
,
vPos
[
i
]
.
fY
,
vPos
[
i
]
.
fZ
,
&
posX
[
i
]
,
&
posY
[
i
]
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
0
]
,
posY
[
0
]
,
posX
[
1
]
,
posY
[
1
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
0
]
,
posY
[
0
]
,
posX
[
11
]
,
posY
[
11
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
0
]
,
posY
[
0
]
,
posX
[
13
]
,
posY
[
13
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
1
]
,
posY
[
1
]
,
posX
[
2
]
,
posY
[
2
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
2
]
,
posY
[
2
]
,
posX
[
5
]
,
posY
[
5
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
2
]
,
posY
[
2
]
,
posX
[
8
]
,
posY
[
8
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
2
]
,
posY
[
2
]
,
posX
[
3
]
,
posY
[
3
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
3
]
,
posY
[
3
]
,
posX
[
4
]
,
posY
[
4
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
5
]
,
posY
[
5
]
,
posX
[
6
]
,
posY
[
6
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
6
]
,
posY
[
6
]
,
posX
[
7
]
,
posY
[
7
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
8
]
,
posY
[
8
]
,
posX
[
9
]
,
posY
[
9
]
,
2
,
0xFFFFFFFF
)
;
SF
->
getRender
(
)
->
DrawLine
(
posX
[
9
]
,
posY
[
9
]
,
posX
[
10
]
,
posY
[
10
]
,
2
,
0xFFFFFFFF
)
;
}
SF
->
getRender
(
)
->
EndRender
(
)
;
// завершаем рисование
}
}
;
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()->registerChatCommand("stillobj", sasas);
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
;
}




В чём ошибка?



Код:






for (int i = 0; i getSAMP()->getPlayers()->iIsListed[i] != 1) continue;
if (SF->getSAMP()->getPlayers()->pRemotePlayer[i] == NULL) continue;
if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData == NULL) continue;
if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor == NULL) continue;
if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped == NULL) continue;
// Если игрок не существует или не в зоне стрима, то пропускаем
#pragma endregion ValidPlayer




Регистрация callback"а в mainloop для кого?

Код:






SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMET HOD_PRESENT, Present);

Harryss
12.01.2019, 15:37
Функция бесконечно вызывается mainloop'ом, флудит сообщением в чат, как беру оружие в руку. Как решить, если помимо mainloop'а нет подходящих мест для ее вызова?

C++:






void
gun_func
(
void
)
{
int
current_weapon
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
if
(
current_weapon
==
31
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1."
)
;
}
}
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
;
init
=
true
;
}
gun_func
(
)
;
}

iAmerican
13.01.2019, 15:14
Функция бесконечно вызывается mainloop'ом, флудит сообщением в чат, как беру оружие в руку. Как решить, если помимо mainloop'а нет подходящих мест для ее вызова?

C++:






int
iTempCurrentWeapon
=
-
1
;
[
/
FONT
]
void
gun_func
(
void
)
{
int
current_weapon
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
if
(
current_weapon
==
31
)
{
if
(
iTempCurrentWeapon
!=
31
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1."
)
;
iTempCurrentWeapon
=
31
;
}
}
else
{
iTempCurrentWeapon
=
-
1
;
}
}
[
FONT
=
Tahoma
]
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
;
init
=
true
;
}
gun_func
(
)
;
}








Как то так вроде. Не проверял

Stiopko
13.01.2019, 18:36
Функция бесконечно вызывается mainloop'ом, флудит сообщением в чат, как беру оружие в руку. Как решить, если помимо mainloop'а нет подходящих мест для ее вызова?

C++:






void
gun_func
(
void
)
{
int
current_weapon
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
if
(
current_weapon
==
31
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1."
)
;
}
}
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
;
init
=
true
;
}
gun_func
(
)
;
}







Попробуй вот так, не самый лудший вариант, можеш еще задержку(GetTickCount) поставить на gun_func().

C++:






void
gun_func
(
void
)
{
static
unsigned
char
current_weapon
=
-
1
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
!=
current_weapon
)
{
if
(
current_weapon
==
31
)
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1."
)
;
current_weapon
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
}
}
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
;
init
=
true
;
}
gun_func
(
)
;
}




Подскажите, для чего нужен #pragma region, и что он делает?

#Rin
13.01.2019, 18:58
Подскажите, для чего нужен #pragma region, и что он делает?


region, endregion(https://docs.microsoft.com/ru-ru/cpp/preprocessor/region-endregion?view=vs-2017) (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcnUtcnUvY3BwL3 ByZXByb2Nlc3Nvci9yZWdpb24tZW5kcmVnaW9uP3ZpZXc9dnMt MjAxNw)

Stiopko
13.01.2019, 19:01
region, endregion(https://docs.microsoft.com/ru-ru/cpp/preprocessor/region-endregion?view=vs-2017) (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vcnUtcnUvY3BwL3 ByZXByb2Nlc3Nvci9yZWdpb24tZW5kcmVnaW9uP3ZpZXc9dnMt MjAxNw)


#pragma region никак не влияет на работу кода, это просто для удобства работы в Visual Studio?

#Rin
13.01.2019, 19:52
#pragma region никак не влияет на работу кода, это просто для удобства работы в Visual Studio?


Да

jenekbueno
14.01.2019, 14:40
@FYP (https://www.blast.hk/members/2/)

в собе не срабатывает деструктор, в связи с этим появляются краши при /q

знающий человек или кто нибудь ещё, скажите пожалуйста адрес на начало функции деструктора игры или сампа

то что ниже, это не то

#define SAMP_HOOKENTER_CNETGAME_DESTR 0xB2893

#define SAMP_HOOKENTER_CNETGAME_DESTR2 0xB3A32

#Rin
15.01.2019, 00:11
@FYP (https://www.blast.hk/members/2/)
в собе не срабатывает деструктор, в связи с этим появляются краши при /q
знающий человек или кто нибудь ещё, скажите пожалуйста адрес на начало функции деструктора игры или сампа

то что ниже, это не то
#define SAMP_HOOKENTER_CNETGAME_DESTR 0xB2893
#define SAMP_HOOKENTER_CNETGAME_DESTR2 0xB3A32


В смысле не верные? Эти адреса подходят для SAMP 0.3.7 R1, только что проверил.

jenekbueno
15.01.2019, 08:26
поставил на них хук и вывожу там сообщение в чат, итог такой что они постоянно флудят, как будто это Present а не деструктор )

woksonal
15.01.2019, 08:42
@FYP (https://www.blast.hk/members/2/)
в собе не срабатывает деструктор, в связи с этим появляются краши при /q
знающий человек или кто нибудь ещё, скажите пожалуйста адрес на начало функции деструктора игры или сампа

то что ниже, это не то
#define SAMP_HOOKENTER_CNETGAME_DESTR 0xB2893
#define SAMP_HOOKENTER_CNETGAME_DESTR2 0xB3A32


00823bdb 212 _doexit

LUCHARE
15.01.2019, 12:25
как будто это Present а не деструктор


это действительно так, если не продолжить выполнение оригинального кода после хука (деструктор будет вызваться до тех пор, пока значение глобального объекта CNetGame не станет равно нулю)

Harryss
16.01.2019, 00:09
Шрифты подгружаются в скомпилированный плагин? Если у человека отсутствует шрифт в директории Win, ему не придется дополнительно скачивать его?

#Rin
16.01.2019, 00:47
Шрифты подгружаются в скомпилированный плагин? Если у человека отсутствует шрифт в директории Win, ему не придется дополнительно скачивать его?


Смотря как сделаешь, можно как и с директории windows грузить, так и в сам плагин запихать шрифт.

Harryss
16.01.2019, 01:54
Есть вариации работы с JSON? Создание, запись, чтение. Иль же на худой конец INI. Находил на форуме FileMan от SR_Team, но ссылка устарела, больше ничего не накопал.

ALF
16.01.2019, 02:00
Есть вариации работы с JSON? Создание, запись, чтение. Иль же на худой конец INI. Находил на форуме FileMan от SR_Team, но ссылка устарела, больше ничего не накопал.


Chapter 32. Boost.PropertyTree - 1.69.0(https://www.boost.org/doc/libs/1_69_0/doc/html/property_tree.html) (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cuYm9vc3Qub3JnL2RvYy9saWJzLzFfNjlfMC 9kb2MvaHRtbC9wcm9wZXJ0eV90cmVlLmh0bWw)

Roger571
16.01.2019, 09:28
Chapter 32. Boost.PropertyTree - 1.69.0(https://www.boost.org/doc/libs/1_69_0/doc/html/property_tree.html) (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cuYm9vc3Qub3JnL2RvYy9saWJzLzFfNjlfMC 9kb2MvaHRtbC9wcm9wZXJ0eV90cmVlLmh0bWw)


Зачем тянуть буст ради такой незначительной зависимости?

Есть же библиотеки с открытым кодом, которые не повлияют на вес конечного проекта

Как вариант, JsonCpp (https://github.com/open-source-parsers/jsoncpp)

#Rin
16.01.2019, 10:50
Есть вариации работы с JSON? Создание, запись, чтение. Иль же на худой конец INI. Находил на форуме FileMan от SR_Team, но ссылка устарела, больше ничего не накопал.


Если нужна библиотека с фишками C++ 11/14, то лучший выбор это: nlohmann/json(https://github.com/nlohmann/json) (https://github.com/nlohmann/json)

Небольшое введение на русском: Как могла бы выглядеть поддержка JSON в современном С++(https://habr.com/ru/company/infopulse/blog/254075/) (https://www.blast.hk/redirect/aHR0cHM6Ly9oYWJyLmNvbS9ydS9jb21wYW55L2luZm9wdWxzZS 9ibG9nLzI1NDA3NS8)

jenekbueno
16.01.2019, 19:11
какие последствия могут быть если в собейте при выходе из игры не использовать menu_free_all() ?

проще говоря, че будет если не освободить память через free(), увыделенную через malloc() / realloc() ?

Harryss
16.01.2019, 20:23
Если нужна библиотека с фишками C++ 11/14, то лучший выбор это: nlohmann/json(https://github.com/nlohmann/json) (https://github.com/nlohmann/json)
Небольшое введение на русском: Как могла бы выглядеть поддержка JSON в современном С++(https://habr.com/ru/company/infopulse/blog/254075/) (https://www.blast.hk/redirect/aHR0cHM6Ly9oYWJyLmNvbS9ydS9jb21wYW55L2luZm9wdWxzZS 9ibG9nLzI1NDA3NS8)


Запись должна осуществляться с помощью библиотеки fstream? Перерыл сайты, но видимо криво сделал. Запись объекта в файл.

C++:






json obj
;
obj
[
"Theme"
]
=
"Black wallpaper"
;
std
::
ofstream
fout
(
"./SAMPFUNCS/img.json"
)
;
fout
.
write
(
(
char
*
)
&
obj
,
sizeof
(
obj
)
)
;
fout
.
close
(
)
;

#Rin
16.01.2019, 21:13
(char*)&obj, sizeof(obj)


Ты почитал хоть документацию? Этот объект json, а не строка. Используй obj.dump().

Насчет работы с файлами: http://cppstudio.com/post/446/ (https://www.blast.hk/redirect/aHR0cDovL2NwcHN0dWRpby5jb20vcG9zdC80NDYv)

Harryss
17.01.2019, 00:27
Ты почитал хоть документацию? Этот объект json, а не строка. Используй obj.dump().
Насчет работы с файлами: http://cppstudio.com/post/446/ (https://www.blast.hk/redirect/aHR0cDovL2NwcHN0dWRpby5jb20vcG9zdC80NDYv)


Сейчас вчитался в документации и статью на хабре, но не отыскал чтение содержимого. Отыскал следующее, но как я понял с помощью этого нельзя работать с самим содержимым JSON'а

C++:






std
::
vector

v
=
{
't'
,
'r'
,
'u'
,
'e'
}
;
json j
=
json
::
parse
(
v
)
;




Находил гайды по JSONcpp и RapidJSON по чтению данных, в этой - нет.

#Rin
17.01.2019, 00:45
Сейчас вчитался в документации и статью на хабре, но не отыскал чтение содержимого. Отыскал следующее, но как я понял с помощью этого нельзя работать с самим содержимым JSON'а

C++:






std
::
vector

v
=
{
't'
,
'r'
,
'u'
,
'e'
}
;
json j
=
json
::
parse
(
v
)
;




Находил гайды по JSONcpp и RapidJSON по чтению данных, в этой - нет.



C++:






json
::
parse
(
)
;

AnWu
18.01.2019, 10:42
C++:






json
::
parse
(
)
;





а как из строки в объект. я чет туплю

Короч такой проблемс. использую json парс, пытаюсь получить из переменной данные:

json users = json::parse(res);

SF->getSAMP()->getChat()->AddChatMessage(-1, users[1]['user'].get().c_str());

Нихера не выходит ;c

json users = json::parse("{\"Loh_Loh\"}");

SF->getSAMP()->getChat()->AddChatMessage(-1, users[1].get().c_str());

???

cover
18.01.2019, 11:14
а как из строки в объект. я чет туплю

Короч такой проблемс. использую json парс, пытаюсь получить из переменной данные:

json users = json::parse(res);
SF->getSAMP()->getChat()->AddChatMessage(-1, users[1]['user'].get().c_str());

Нихера не выходит ;c

json users = json::parse("{\"Loh_Loh\"}");
SF->getSAMP()->getChat()->AddChatMessage(-1, users[1].get().c_str());

???


Decode json in c++(https://stackoverflow.com/questions/19628637/decode-json-in-c) (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMT k2Mjg2MzcvZGVjb2RlLWpzb24taW4tYw)

AnWu
18.01.2019, 12:14
Decode json in c++(https://stackoverflow.com/questions/19628637/decode-json-in-c) (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMT k2Mjg2MzcvZGVjb2RlLWpzb24taW4tYw)


а на json от nlohmann/json(https://github.com/nlohmann/json/) (https://github.com/nlohmann/json/) как?(

Roger571
18.01.2019, 17:06
а на json от nlohmann/json(https://github.com/nlohmann/json/) (https://github.com/nlohmann/json/) как?(



Код:






std::string s = users.dump();

NarutoUA
18.01.2019, 18:07
Лучше забей и юзай ini:

brofield/simpleini(https://github.com/brofield/simpleini) (https://github.com/brofield/simpleini)

AnWu
18.01.2019, 18:46
Лучше забей и юзай ini:
brofield/simpleini(https://github.com/brofield/simpleini) (https://github.com/brofield/simpleini)


Причем тут ини? json мне нужен для чтения ответа с сервера :/

NarutoUA
18.01.2019, 19:23
Причем тут ини? json мне нужен для чтения ответа с сервера :/


Да я вообще не тебе, а челу который в среду писал

Harryss
19.01.2019, 00:20
Да я вообще не тебе, а челу который в среду писал


Уже понял, что для постоянной перезаписи JSON не вкатит. Помимо INI на слуху стояли Toml, Tree. Чем-то из этого пользовался, посоветуешь?

F11GAR0.
19.01.2019, 18:57
0393: actor $PLAYER_ACTOR perform_animation "Gun_2_IDLE" at 4@ times_normal_rate

адрес ***ни плиз

LaRossa
27.01.2019, 15:44
Подскажите как понять, что установлен SAMP ADDON

index
28.01.2019, 00:05
Подскажите как понять, что установлен SAMP ADDON


У последних версий audio.asi имеет такой Version Info. У предыдущих - не знаю, возможно тоже самое.

Код:






1 VERSIONINFO
FILEVERSION 2,1,0,0
PRODUCTVERSION 0,0,0,0
FILEOS 0x0
FILETYPE 0x0
{
BLOCK "StringFileInfo"
{
BLOCK "04090025"
{
VALUE "FileDescription", "SA-MP Addon library"
VALUE "LegalCopyright", "Copyright © Absolute Play www.gta-samp.ru"
VALUE "CompanyName", "Absolute Play www.gta-samp.ru"
VALUE "ProductName", "SA-MP Addon"
VALUE "InternalName", "audio"
VALUE "ProductVersion", "v2.4"
VALUE "Comments", "Modification for GTA San Andreas"
}
}

BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0409 0x0025
}
}




Но это не гарантирует установленный включенный аддон на 100%, этот файл могут просто оттуда использовать. Еще множно в реестре поискать, при установке туда информация для деинсталляции аддона пишется.

vasiliy130198
31.01.2019, 01:58
Подскажите пожалуйста нормальные примеры проектов для гта, где используется рендер directx. Sobeit, plugin sdk знаю, нужны еще варианты)

Есть еще Samp Omega, там очень круто всё рассписано, но при создании шрифта (D3DXCreateFont) происходит краш именно на этой функции.. :wall:

И такой вопрос: бывали раньше случаи такие, когда рендер не рисовал текст на экране, а как только уберу какую-то дллку с папки игры -- всё окей. Что это значит, и в каком проекте можно подсмотреть решение?

Спасибо. :thank_you:

akatosh
02.02.2019, 17:48
Появилась необходимость реализовать на С++ консольном приложении систему горячих клавиш. Если принимать сообщения через WndProc о нажатиях, всё работает нормально, но до тех пор, пока я не сверну/уберу фокус с моего приложения.

Вопрос: как можно сделать так, чтобы моё приложения после скрытия продолжало принимать события нажатия клавиши/мыши, как это сделано в AHK?

Harryss
03.02.2019, 18:22
Крашит скрипт из первого урока по sampfuncs, из-за чего это может быть?


Показать код, например.

Stiopko
03.02.2019, 21:18
Как можно расположит текст по центру форми в ImGui?

ae1c2a
04.02.2019, 11:03
Код:






#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include "imgui.h"
#include
#define DIRECTINPUT_VERSION 0x0800
#include
#include
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS *SF = new SAMPFUNCS();

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];

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;
}




Как пофиксить?

Imgur(https://imgur.com/a/vOrjMjA) (https://imgur.com/a/vOrjMjA)

randazzo
04.02.2019, 14:20
Код:






#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include "imgui.h"
#include
#define DIRECTINPUT_VERSION 0x0800
#include
#include
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS *SF = new SAMPFUNCS();

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];

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;
}




Как пофиксить?
Imgur(https://imgur.com/a/vOrjMjA) (https://imgur.com/a/vOrjMjA)


14 строку удали.

ae1c2a
04.02.2019, 14:32
14 строку удали.


Я криворукий шушуть, поэтому буду признателен за объяснение этой херни:

Imgur(https://imgur.com/a/nxPA8KT) (https://imgur.com/a/nxPA8KT)

Harryss
05.02.2019, 12:23
Я криворукий шушуть, поэтому буду признателен за объяснение этой херни:
Imgur(https://imgur.com/a/nxPA8KT) (https://imgur.com/a/nxPA8KT)


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

Woofing Giraffe
05.02.2019, 19:03
Как получить ближайшею машину?



Код:





[CODE]
int GetNearestVehicle() {
int nearestVehicle = -1;
double closestDistance = -1;
typedef long double(__thiscall* GetDistance)(stSAMPVehicle*);
for (int vID = 1; vID getSAMP()->getVehicles();
if (allVehicles->iIsListed[vID] != 1 || allVehicles->iIsListed2[vID] != 1)
continue;
if (allVehicles->pSAMP_Vehicle[vID] == 0 || allVehicles->pSAMP_Vehicle[vID]->pGTA_Vehicle == 0)
continue;
static double currentDistance;
static GetDistance getDistanceToLocalPlayer = (GetDistance)(SF->getSAMP()->getSAMPAddr() + 0x9A700);
currentDistance = getDistanceToLocalPlayer(allVehicles->pSAMP_Vehicle[vID]);
if (closestDistance == -1) {
closestDistance = currentDistance;
nearestVehicle = vID;
}
else if (currentDistance

xISRAPILx
09.02.2019, 22:16
Cannot open include file: 'd3dx9.h'

Как это пофиксить? До переустановки студии всё было нормально. DirectX 9 установлен.

Stiopko
09.02.2019, 22:18
Cannot open include file: 'd3dx9.h'
Как это пофиксить? До переустановки студии всё было нормально. DirectX 9 установлен.


Directx sdk походу это тебе нужно

Неадекватная сова
09.02.2019, 22:30
Как ID в CVehicle преобразовать?



C++:






struct
vehicle_info
*
pVehicle
=
SF
->
getGame
(
)
->
vehicleInfoGet
(
ID
,
0
)
;
CVehicle
*
CVeh
=
GAME
->
GetPools
(
)
->
GetVehicle
(
(
DWORD
)
pVehicle
)
;

0xNull_Dll
09.02.2019, 23:21
Существует ли способ повернуть колеса на определенный градус?

К примеру, если эмулировать нажатие кнопки - колеса поворачиваются градусов на 50, а мне нужно, допустим, на 10.

Как это сделать?

xISRAPILx
09.02.2019, 23:31
Вот шо за пиздец? Тупо голый проект запустить не могу.

1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cp pCommon.targets(639,9): error MSB4030: "DebugFull" is an invalid value for the "GenerateDebugInformation" parameter of the "Link" task. The "GenerateDebugInformation" parameter is of type "System.Boolean".

ALF
10.02.2019, 00:43
Вот шо за пиздец? Тупо голый проект запустить не могу.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cp pCommon.targets(639,9): error MSB4030: "DebugFull" is an invalid value for the "GenerateDebugInformation" parameter of the "Link" task. The "GenerateDebugInformation" parameter is of type "System.Boolean".


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

Cake_
10.02.2019, 01:14
Кто может дать функцию фейк афк?

Azller Lollison
10.02.2019, 01:15
Кто может дать функцию фейк афк?


хукаешь онфут\инкар\пассенжер\спек и нопаешь.

Adder
10.02.2019, 17:07
Как через ID_VEHICLE_SYNC, прочитать скорость машины?

При попытке словить скорость так: g_Players->pRemotePlayer[pId]->pPlayerData->fVehicleMoveSpeed - получается всё нормально.

Через ID_VEHICLE_SYNC, как не пытался получить fMoveSpeed, не получалось

Cake_
11.02.2019, 18:35
Как проверить, что сообщение пришло от именно от сервера а не от игрока?

Cake_
13.02.2019, 10:41
Как пофиксить краш при /q в имгуи?

Harryss
13.02.2019, 16:35
Как пофиксить краш при /q в имгуи?


Версию SDK с версией SF сверь.

В точности не знаю, произошли ли изменения в SDK с обновлением до 5.4, но заметил, что плагин на SDK 5.4 при /q на SF 5.3 крашит, а на 5.4 - нет.

Sloth
13.02.2019, 17:22
Несколько вопросов...

1. Как сделать чтоб русский текст в имгуи окне отображался нормально.

2. Как настроить шрифт в имгуи окне? Стандартный не красивый, тонкий такой.

Musaigen
13.02.2019, 19:22
C:\\Windows\\Fonts\\Tahoma.ttf


А если система не на C?



static CONST ImWchar ranges[] = { 0x0020, 0x00FF, 0x0400, 0x044F, 0 };


В чем смысл static, если код в инициализации выполняется 1 раз?

Harryss
13.02.2019, 19:41
дай ссылку на sdk 5,4 :)

C++:






ImFontConfig FontConfig
;
FontConfig
.
OversampleH
=
1
;
FontConfig
.
OversampleV
=
1
;
FontConfig
.
PixelSnapH
=
1
;
static
CONST ImWchar ranges
[
]
=
{
0x0020
,
0x00FF
,
0x0400
,
0x044F
,
0
}
;
io
.
Fonts
->
AddFontFromFileTTF
(
"C:\\Windows\\Fonts\\Tahoma.ttf"
,
15.0F
,
&
FontConfig
,
ranges
)
;




1 - Запихни это в иницилизацию окна, и перед текстом пиши u8 пример u8"Русский текст"
2 вместо тахомы можешь выбрать свой шрифт


он внутри архива с SF 5.4

-raymond-
15.02.2019, 17:10
как немного зарандомить z координату?

C++:






sync
.
fOrigin
[
0
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fPosition
[
0
]
;
sync
.
fOrigin
[
1
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fPosition
[
1
]
;
sync
.
fOrigin
[
2
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fPosition
[
2
]
;

Vlad Horii
15.02.2019, 18:52
как немного зарандомить z координату?

C++:






sync
.
fOrigin
[
0
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fPosition
[
0
]
;
sync
.
fOrigin
[
1
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fPosition
[
1
]
;
sync
.
fOrigin
[
2
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fPosition
[
2
]
;






C++:






sync
.
fOrigin
[
2
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fPosition
[
2
]
+
rand
(
)
%
10




rand() не?

Stiopko
15.02.2019, 18:55
C++:






sync
.
fOrigin
[
2
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fPosition
[
2
]
+
rand
(
)
%
10




rand() не?


Ну это не настоящий рандом(будут одни и теже значения) нужно еще инициализировать такое

C++:






srand
(
time
(
NULL
)
)
;
// и еще библиотеку ctime надо подключить




C++:






sync
.
fOrigin
[
2
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fPosition
[
2
]
+
(
(
rand
(
)
%
21
)
-
10
)

CarLCas
15.02.2019, 19:13
Ну это не настоящий рандом(будут одни и теже значения) нужно еще инициализировать такое

C++:






srand
(
time
(
NULL
)
)
;
// и еще библиотеку ctime надо подключить




C++:






sync
.
fOrigin
[
2
]
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
.
fPosition
[
2
]
+
(
(
rand
(
)
%
21
)
-
10
)





11 стандарт давно приняли, а вы всё так же пользуетесь rand, используйте имеющиеся возможности std::uniform_real_distribution - cppreference.com(https://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution) (https://www.blast.hk/redirect/aHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL251bW VyaWMvcmFuZG9tL3VuaWZvcm1fcmVhbF9kaXN0cmlidXRpb24)

ЯedЯuM
15.02.2019, 22:44
Версию SDK с версией SF сверь.

В точности не знаю, произошли ли изменения в SDK с обновлением до 5.4, но заметил, что плагин на SDK 5.4 при /q на SF 5.3 крашит, а на 5.4 - нет.


Это потому что Фип в 5.4 пофиксил проблему с затиранием деструктора другими плагинами.

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

ЯedЯuM
19.02.2019, 23:53
Как получить название машины в которой сидишь?






C++:






char
vehNames
[
]
[
212
]
=
{
{
"Landstalker"
}
,
{
"Bravura"
}
,
{
"Buffalo"
}
,
{
"Linerunner"
}
,
{
"Perrenial"
}
,
{
"Sentinel"
}
,
{
"Dumper"
}
,
{
"Firetruck"
}
,
{
"Trashmaster"
}
,
{
"Stretch"
}
,
{
"Manana"
}
,
{
"Infernus"
}
,
{
"Voodoo"
}
,
{
"Pony"
}
,
{
"Mule"
}
,
{
"Cheetah"
}
,
{
"Ambulance"
}
,
{
"Leviathan"
}
,
{
"Moonbeam"
}
,
{
"Esperanto"
}
,
{
"Taxi"
}
,
{
"Washington"
}
,
{
"Bobcat"
}
,
{
"MrWhoopee"
}
,
{
"BFInjection"
}
,
{
"Hunter"
}
,
{
"Premier"
}
,
{
"Enforcer"
}
,
{
"Securicar"
}
,
{
"Banshee"
}
,
{
"Predator"
}
,
{
"Bus"
}
,
{
"Rhino"
}
,
{
"Barracks"
}
,
{
"Hotknife"
}
,
{
"Trailer1"
}
,
{
"Previon"
}
,
{
"Coach"
}
,
{
"Cabbie"
}
,
{
"Stallion"
}
,
{
"Rumpo"
}
,
{
"RCBandit"
}
,
{
"Romero"
}
,
{
"Packer"
}
,
{
"Monster"
}
,
{
"Admiral"
}
,
{
"Squalo"
}
,
{
"Seasparrow"
}
,
{
"Pizzaboy"
}
,
{
"Tram"
}
,
{
"Trailer2"
}
,
{
"Turismo"
}
,
{
"Speeder"
}
,
{
"Reefer"
}
,
{
"Tropic"
}
,
{
"Flatbed"
}
,
{
"Yankee"
}
,
{
"Caddy"
}
,
{
"Solair"
}
,
{
"BerkleyRCVan"
}
,
{
"Skimmer"
}
,
{
"PCJ-600"
}
,
{
"Faggio"
}
,
{
"Freeway"
}
,
{
"RCBaron"
}
,
{
"RCRaider"
}
,
{
"Glendale"
}
,
{
"Oceanic"
}
,
{
"Sanchez"
}
,
{
"Sparrow"
}
,
{
"Patriot"
}
,
{
"Quad"
}
,
{
"Coastguard"
}
,
{
"Dinghy"
}
,
{
"Hermes"
}
,
{
"Sabre"
}
,
{
"Rustler"
}
,
{
"ZR-350"
}
,
{
"Walton"
}
,
{
"Regina"
}
,
{
"Comet"
}
,
{
"BMX"
}
,
{
"Burrito"
}
,
{
"Camper"
}
,
{
"Marquis"
}
,
{
"Baggage"
}
,
{
"Dozer"
}
,
{
"Maverick"
}
,
{
"NewsChopper"
}
,
{
"Rancher"
}
,
{
"FBIRancher"
}
,
{
"Virgo"
}
,
{
"Greenwood"
}
,
{
"Jetmax"
}
,
{
"Hotring"
}
,
{
"Sandking"
}
,
{
"Blista Compact"
}
,
{
"Police Maverick"
}
,
{
"Boxville"
}
,
{
"Benson"
}
,
{
"Mesa"
}
,
{
"RCGoblin"
}
,
{
"HotringRacer A"
}
,
{
"HotringRacer B"
}
,
{
"BloodringBanger"
}
,
{
"Rancher"
}
,
{
"SuperGT"
}
,
{
"Elegant"
}
,
{
"Journey"
}
,
{
"Bike"
}
,
{
"MountainBike"
}
,
{
"Beagle"
}
,
{
"Cropdust"
}
,
{
"Stunt"
}
,
{
"Tanker"
}
,
{
"Roadtrain"
}
,
{
"Nebula"
}
,
{
"Majestic"
}
,
{
"Buccaneer"
}
,
{
"Shamal"
}
,
{
"Hydra"
}
,
{
"FCR-900"
}
,
{
"NRG-500"
}
,
{
"HPV1000"
}
,
{
"CementTruck"
}
,
{
"TowTruck"
}
,
{
"Fortune"
}
,
{
"Cadrona"
}
,
{
"FBITruck"
}
,
{
"Willard"
}
,
{
"Forklift"
}
,
{
"Tractor"
}
,
{
"Combine"
}
,
{
"Feltzer"
}
,
{
"Remington"
}
,
{
"Slamvan"
}
,
{
"Blade"
}
,
{
"Freight"
}
,
{
"Streak"
}
,
{
"Vortex"
}
,
{
"Vincent"
}
,
{
"Bullet"
}
,
{
"Clover"
}
,
{
"Sadler"
}
,
{
"FiretruckLA"
}
,
{
"Hustler"
}
,
{
"Intruder"
}
,
{
"Primo"
}
,
{
"Cargobob"
}
,
{
"Tampa"
}
,
{
"Sunrise"
}
,
{
"Merit"
}
,
{
"Utility"
}
,
{
"Nevada"
}
,
{
"Yosemite"
}
,
{
"Windsor"
}
,
{
"MonsterA"
}
,
{
"MonsterB"
}
,
{
"Uranus"
}
,
{
"Jester"
}
,
{
"Sultan"
}
,
{
"Stratum"
}
,
{
"Elegy"
}
,
{
"Raindance"
}
,
{
"RC Tiger"
}
,
{
"Flash"
}
,
{
"Tahoma"
}
,
{
"Savanna"
}
,
{
"Bandito"
}
,
{
"FreightFlat"
}
,
{
"StreakCarriage"
}
,
{
"Kart"
}
,
{
"Mower"
}
,
{
"Duneride"
}
,
{
"Sweeper"
}
,
{
"Broadway"
}
,
{
"Tornado"
}
,
{
"AT-400"
}
,
{
"DFT-30"
}
,
{
"Huntley"
}
,
{
"Stafford"
}
,
{
"BF-400"
}
,
{
"Newsvan"
}
,
{
"Tug"
}
,
{
"Trailer 3"
}
,
{
"Emperor"
}
,
{
"Wayfarer"
}
,
{
"Euros"
}
,
{
"Hotdog"
}
,
{
"Club"
}
,
{
"FreightCarriage"
}
,
{
"Trailer3"
}
,
{
"Andromada"
}
,
{
"Dodo"
}
,
{
"RCCam"
}
,
{
"Launch"
}
,
{
"PoliceCar(LSPD)"
}
,
{
"PoliceCar(SFPD)"
}
,
{
"PoliceCar(LVPD)"
}
,
{
"PoliceRanger"
}
,
{
"Picador"
}
,
{
"S.W.A.T.Van"
}
,
{
"Alpha"
}
,
{
"Phoenix"
}
,
{
"Glendale"
}
,
{
"Sadler"
}
,
{
"LuggageTrailerA"
}
,
{
"LuggageTrailerB"
}
,
{
"StairTrailer"
}
,
{
"Boxville"
}
,
{
"FarmPlow"
}
,
{
"UtilityTrailer"
}
}
;
int
carid
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
inCarData
.
sVehicleID
;
int
veh_handle
=
SF
->
getSAMP
(
)
->
getVehicles
(
)
->
GetCarHandleFromSAMPCarID
(
carid
)
;
WORD modelid
=
GAME
->
GetPools
(
)
->
GetVehicle
(
veh_handle
)
->
GetModelIndex
(
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
148
,
112
,
255
)
,
"{07DA5B}CarName: %s"
,
vehNames
[
modelid
-
400
]
)
;

ЯedЯuM
20.02.2019, 00:35
http://prntscr.com/mncs51 (https://www.blast.hk/redirect/aHR0cDovL3BybnRzY3IuY29tL21uY3M1MQ)


WORD modelid = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[carid]->pGTA_Vehicle->base.model_alt_id;

ae1c2a
20.02.2019, 17:51
как отправить сообщение на сервер?

jenekbueno
21.02.2019, 19:12
как отправить сообщение на сервер?


в какой среде

ae1c2a
21.02.2019, 19:15
в какой среде


vs

jenekbueno
21.02.2019, 19:27
vs


в собе есть функция

sense.eXe
21.02.2019, 23:14
Народ у меня вопрос по sf api вообщем мне нужно найти 3д коорды кости

Но я знаю только вот это:

Код:






CVector head_pos;
Ped->GetBonePosition(eBone::BONE_HEAD, &head_pos)




Но это нельзя использовать в написании того же вх помогите как мне конвертировать эти координаты в 3D

P.S Народ я разобрался так что листайте дальше!!!!

Cake_
22.02.2019, 00:17
Вопрос века: как проверить что 3D Text на экране?



C++:






bool
CALLBACK
incomingRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
ScriptRPCEnumeration
::
RPC_ScrDisplayGameText
)
{
static
unsigned
int
length
;
static
char
msg
[
256
]
;
static
BitStream bsOnfootSync
;
static
stOnFootData ofSync
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
SetReadOffset
(
64
)
;
params
->
bitStream
->
Read
(
length
)
;
params
->
bitStream
->
Read
(
msg
,
length
)
;
msg
[
length
]
=
'\0'
;
if
(
!
strcmp
(
msg
,
"Your text"
)
)
{
// action
}

SiTrak
22.02.2019, 10:05
Это будет работать во всем стриме или только на видимой дистанции?


во всём стриме

Cake_
22.02.2019, 17:15
Это будет работать во всем стриме или только на видимой дистанции?


стрим

Cake_
23.02.2019, 12:35
как использовать задержку в CALLBACK'ах ?

Stiopko
23.02.2019, 12:39
как использовать задержку в CALLBACK'ах ?



Код:





[CODE]
static unsigned long long timer = GetTickCount()
if (timer + 1000

sense.eXe
24.02.2019, 16:47
Как получить цвет клиста? sf api

SiTrak
24.02.2019, 16:49
Как получить цвет клиста? sf api


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

Cake_
26.02.2019, 23:08
Не работает


у меня работает



Не работает


дай скрин текста который тебе надо?

sdfaw
01.03.2019, 23:17
как установить всё нужное чтобы писать sf плагины, читал темы разные, нихуя не понятно (я ньюфаг в с++). Вроде всё установил что надо, но что делать дальше хз.

jenekbueno
03.03.2019, 12:39
в луа есть такая шляпа как onPlayerDeathNotification.

помогите на плюсах такое сделать, либо, хотя бы адрес функции выполняющее добавление игрока в килл лист, в самп.длл помогите найти.

#Rin
03.03.2019, 14:04
хотя бы адрес функции выполняющее добавление игрока в килл лист, в самп.длл помогите найти


Для 0.3.7 R1: 0x66A10

index
06.03.2019, 03:29
Подскажите,пожалуйста, адрес функи, которая ставит стрелку над педом




http://pro-gang.ucoz.ru/_ld/14/41034485.jpg

JmZ
06.03.2019, 09:33
Есть ли возможность менять шрифт текста для ImGui меню?


Есть, чекни исходники проектов на ImGui, может быть найдешь.



как установить всё нужное чтобы писать sf плагины, читал темы разные, нихуя не понятно (я ньюфаг в с++). Вроде всё установил что надо, но что делать дальше хз.


1. Скачиваешь Microsoft Visual Studio 2012 Community.

2. Смотришь урок DarkP1xel (Таирка one love) по настройке DLL, но конечное расширение ставишь .sf.

3. Закидываешь библиотеки SAMPFUNCS в каталог проекта.

4. Учишься писать на SF API (https://blast.hk/threads/23416/)

5. Пишешь свой ахуенный плагин с блекджеком и шлюхами.

А лучше шли на*** этот SF API и пиши на DLL.

Я вообще проекты на консольной строке Windows делаю, нормалек.

AMAHASLA
07.03.2019, 12:39
Ребят, у меня чекер домов и бизов на ДРП от гонщика, он блять игнорит всех уже месяца два, не отвечает, иду к вам за помощью!!! Так как ошибка, которой раньше не было, вылезает связанная с C++

Расклад такой, когда я захожу с КЛЕО 4.3 у меня крашит, недоходя до экрана, где подключение к серверу

Приложение:

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

Если ТЕПЕРЬ устанавлю КЛЕО 4.1, просто включается экран загрузки, чуть-чуть грузит о просто игра исчезает, ни звука, ни духа...

А раньше с КЛЕО 4.1 Вылезла такая ошибка

Приложение:

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

Ребят, помогите... я не знаю что делать, я все перепробовал

А именно: Создал нового пользователя и попробовал там установить ГТА и засунуть туда чекер, та же ошибка, как выше с C++

Переустанавливал ГТА, САМП, КЛЕО, САМПФУНКС... Ничего... Пробовал вбивать коды ошибок, их нет в сети, ни у кого таких крашей с таким кодом не было..

Надеюсь вы знаете как исправить :C

ma_za_xa_ka
07.03.2019, 22:06
Хочу получить адрес маркера и телепортироваться к нему, получаю только краш. Что делаю не так?

void cmd_gotocheck() {

DWORD* marker = (DWORD*)0xC7DD58;

DWORD* px = (DWORD*)((*marker) + 0x48);

DWORD* py = (DWORD*)((*marker) + 0x52);

DWORD* pz = (DWORD*)((*marker) + 0x56);

DWORD* chech = (DWORD*)((*marker) + 0x80);

for (int i = 0; i 2695 && x -1705 && y 1099 && x 1601 && y

Sagittarius
08.03.2019, 13:15
Как исправить вот этот прикол?

[Error] SAMPFUNCS_API.h: No such file or directory

SiTrak
16.03.2019, 21:59
Есть у кого нибудь адреса для получения координат камеры?

index
17.03.2019, 09:31
Есть у кого нибудь адреса для получения координат камеры?


x 0xB6F9CC

y 0xB6F9D0

z 0xB6F9D4

Шурик
17.03.2019, 22:34
Подскажите пожалуйста, каким образом я могу передать метод класса в функцию registerChatCommand.

Stiopko
17.03.2019, 22:35
Подскажите пожалуйста, каким образом я могу передать метод класса в функцию registerChatCommand.


перед методом пиши static, просто нужна статическая функция

Шурик
17.03.2019, 22:36
перед методом пиши static, просто нужна статическая функция


Благодарствую. Сейчас проверю.

UPD:

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

PS:

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

Stiopko
17.03.2019, 22:45
Благодарствую. Сейчас проверю.

UPD:

PS:


И еще после void допиши CALLBACK

Шурик
17.03.2019, 22:48
И еще после void допиши CALLBACK


Ты PS смотрел?

Stiopko
17.03.2019, 22:49
И еще после void допиши CALLBACK



Lua:






static void CALLBACK
run
(
std
::
string prms
/
*
текст после команды
*
/
)
{
}

Шурик
17.03.2019, 22:49
static void CALLBACK run(std::string prms/*текст после команды*/){

}


Ой, совсем забыл. Спасибо.

UPD:

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

UPD: Проблема была в другом

Шурик
18.03.2019, 11:54
Почему вылетает SAMP без каких либо ошибок?

У меня есть класс Test с 2-я методами и 1-й переменной.

C++:






class
Test
{
public
:
std
::
vector

data
;
std
::
thread
start
(
std
::
string params
)
{
return
std
::
thread
(
&
Test
::
run
,
this
)
;
}
private
:
void
run
(
)
{
SAMPFUNCS SF
;
for
(
auto
i
=
0
;
i

getChat
(
)
->
AddChatMessage
(
-
1
,
data
[
i
]
.
c_str
(
)
)
;
}
}
}
;




И я в функции mainloop выполняю следующее:

C++:






Test test
;
test
.
data
.
push_back
(
"s"
)
;
test
.
data
.
push_back
(
"s"
)
;
test
.
data
.
push_back
(
"s"
)
;
test
.
data
.
push_back
(
"s"
)
;
std
::
thread th
=
test
.
start
(
""
)
;

Stiopko
18.03.2019, 12:23
C++:






Test test
;
test
.
data
.
push_back
(
"s"
)
;
test
.
data
.
push_back
(
"s"
)
;
test
.
data
.
push_back
(
"s"
)
;
test
.
data
.
push_back
(
"s"
)
;
std
::
thread th
=
test
.
start
(
""
)
;





Если это в маинлуп то ты создаёшь очень много потоков и из-за етого вылет нужны проверки

Шурик
18.03.2019, 12:51
Если это в маинлуп то ты создаёшь очень много потоков и из-за етого вылет нужны проверки


Не совсем понял, можно подробней?

Cake_
18.03.2019, 12:53
Не совсем понял, можно подробней?


Условие нужно

Шурик
18.03.2019, 12:55
Условие нужно





Если это в маинлуп то ты создаёшь очень много потоков и из-за етого вылет нужны проверки



Я кажется вас понял.

У меня поток создаётся 1 раз (не бесконечно, только при инициализации).

Stiopko
18.03.2019, 13:00
Не совсем понял, можно подробней?


Екземпляр класса должен быть глобальным или static

Шурик
18.03.2019, 14:58
Екземпляр класса должен быть глобальным или static


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

Хочу обратить внимание на то, что если я укажу th.join() после: std::thread th = test.start(""), то игра не вылетит, но к сожалению от потока не будет смысла (т.к. фризит процесс при Sleep).

UPD: Проверил на консольном приложении - успешно (но не в SF).

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

Harryss
18.03.2019, 17:15
Попытался сделать глобальным и статическим - результата нет, всё также вылетает.

Хочу обратить внимание на то, что если я укажу th.join() после: std::thread th = test.start(""), то игра не вылетит, но к сожалению от потока не будет смысла (т.к. фризит процесс при Sleep).

UPD: Проверил на консольном приложении - успешно (но не в SF).

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



Необходимость в парилке с потоком возникла с целью нормально использовать задержку?

Шурик
18.03.2019, 17:33
Необходимость в парилке с потоком возникла с целью нормально использовать задержку?


Да, но не только из-за задержки.

Harryss
18.03.2019, 18:14
Да, но не только из-за задержки.


Если это вдруг поможет, предлагаю простой вариант избавления от этой парилки, с библиотекой thread.

C++:





[CODE]
const
auto
myTask
=
[
]
(
)
{
// Твой код.
// Можно использовать Sleep и это не будет тормозить игру.
}
;
std
::
thread
(
myTask
)
.
detach
(
)
;
//

Шурик
18.03.2019, 19:33
[QUOTE="Harryss"]

Если это вдруг поможет, предлагаю простой вариант избавления от этой парилки, с библиотекой thread.

C++:





[CODE]
const
auto
myTask
=
[
]
(
)
{
// Твой код.
// Можно использовать Sleep и это не будет тормозить игру.
}
;
std
::
thread
(
myTask
)
.
detach
(
)
;
//

AnWu
18.03.2019, 19:57
Есть ли возможность менять шрифт текста для ImGui меню?



C++:






ImGui
::
CreateContext
(
)
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
SF
->
getRender
(
)
->
getD3DDevice
(
)
)
;
ImGuiIO
&
IO
=
ImGui
::
GetIO
(
)
;
if
(
!
bChangeFont
)
{
ImFontConfig font_config
;
TCHAR path
[
MAX_PATH
]
;
HRESULT hr
=
SHGetFolderPathA
(
NULL
,
CSIDL_FONTS
,
NULL
,
SHGFP_TYPE_CURRENT
,
path
)
;
std
::
string fPath
=
std
::
string
(
path
)
.
append
(
"\\arialbd.ttf"
)
;
IO
.
Fonts
->
AddFontFromFileTTF
(
fPath
.
c_str
(
)
,
14.0f
,
&
font_config
,
IO
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
smallFont
=
IO
.
Fonts
->
AddFontFromFileTTF
(
fPath
.
c_str
(
)
,
12.0f
,
&
font_config
,
IO
.
Fonts
->
GetGlyphRangesCyrillic
(
)
)
;
bChangeFont
=
true
;
}
ImGuiStyle
*
style
=
&
ImGui
::
GetStyle
(
)
;




у меня так

Шурик
18.03.2019, 21:39
Возможно ли в registerChatCommandпередать в качестве второго параметра лямбду? Но внутри неё мне нужно получить 2 переменные, которые в ней не находятся. Если да, то пожалуйста покажите пример.

Harryss
18.03.2019, 22:33
Возможно ли в registerChatCommandпередать в качестве второго параметра лямбду? Но внутри неё мне нужно получить 2 переменные, которые в ней не находятся. Если да, то пожалуйста покажите пример.


registerChatCommand напрямую с лямбдой не работает, на основе того, что я показал ранее, с cmd работаю так

C++:






void
CALLBACK
cmdExample
(
std
::
string param
)
{
if
(
param
.
empty
(
)
)
return
;
const
auto
task
=
[
param
]
(
)
// Просто добавил param
{
// Код, задержки, все дела.
int
my_int
=
std
::
stoi
(
param
)
;
// Получение параметра функции
}
;
std
::
thread
(
task
)
.
detach
(
)
;
}

Шурик
18.03.2019, 22:47
registerChatCommand напрямую с лямбдой не работает, на основе того, что я показал ранее, с cmd работаю так

C++:






void
CALLBACK
cmdExample
(
std
::
string param
)
{
if
(
param
.
empty
(
)
)
return
;
const
auto
task
=
[
param
]
(
)
// Просто добавил param
{
// Код, задержки, все дела.
int
my_int
=
std
::
stoi
(
param
)
;
// Получение параметра функции
}
;
std
::
thread
(
task
)
.
detach
(
)
;
}





У меня нет определённой команды.

Я команды создаю уже непосредственно в самой игре и не могу сделать так как у тебя.

index
18.03.2019, 22:50
Не подскажете, какой тип имеет выражение?)

Код:






[](){};

san0
18.03.2019, 23:56
Не подскажете, какой тип имеет выражение?)

Код:






[](){};





Стандартом не определена однозначность.

Так называемый closure type - prvalue выражение, которое представляет собой уникальную неименованную неагрегированную структуру/класс, которая имеет перегруженный operator(), ну и еще пару методов.

В случае, когда функция не имеет захватов (сaptures), тогда можно неявно преобразовать в указатель на функцию

C++:





[CODE]
#include
#include
#include
auto
main
(
void
)
->
int
{
void
(
*
dd
)
(
)
=
[
]
{
std
::
cout

pp
=
[
]
{
std
::
cout





Z4mainEUlvE0_
Z4mainEUlvE1_
FvvE
FvvE


Надеюсь, чуточку прояснил ситуацию, но в любом случае советую посмотреть

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf (https://www.blast.hk/redirect/aHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMj EvZG9jcy9wYXBlcnMvMjAxNC9uNDI5Ni5wZGY), 94 страница

sdfaw
24.03.2019, 18:11
дарова, вобщем хочу начать писать sf плагины, можете объяснить в кратце что по чём.

например как пользоваться

SF->тут что-то()->тут что-то()->тут что-то();

или что такое вот это

pPlayer->szPlayerName,

pPlayer->iPing,

pPlayer->iScore,

pPlayer->iIsNPC,

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

где можно найти информацию про это?

где можно найти функции sf api?

sdfaw
24.03.2019, 18:39
Структуры это. Заходишь в папку SFAPI, там заголовочные файлы (.h), в этих файлах будут эти структуры.


а где можно почитать про sf api?

p.s видел уроки usShadow, но мало что понял

atizoff
25.03.2019, 17:18
как применить стиль в имгуи?

4el0ve4ik
25.03.2019, 17:21
как применить стиль в имгуи?


как то так:

C++:






ImGuiStyle
&
style
=
ImGui
::
GetStyle
(
)
;
style
.
Colors
[
ImGuiCol_Text
]
=
ImVec4
(
0.90f
,
0.90f
,
0.90f
,
0.93f
)
;
style
.
Colors
[
ImGuiCol_TextDisabled
]
=
ImVec4
(
0.60f
,
0.60f
,
0.60f
,
0.68f
)
;
style
.
Colors
[
ImGuiCol_WindowBg
]
=
ImVec4
(
0.16f
,
0.16f
,
0.16f
,
0.96f
)
;
style
.
Colors
[
ImGuiCol_PopupBg
]
=
ImVec4
(
0.10f
,
0.10f
,
0.10f
,
0.94f
)
;
style
.
Colors
[
ImGuiCol_Border
]
=
ImVec4
(
0.34f
,
0.33f
,
0.34f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_FrameBg
]
=
ImVec4
(
0.80f
,
0.80f
,
0.80f
,
0.33f
)
;
style
.
Colors
[
ImGuiCol_FrameBgHovered
]
=
ImVec4
(
0.80f
,
0.80f
,
1.00f
,
0.40f
)
;
style
.
Colors
[
ImGuiCol_FrameBgActive
]
=
ImVec4
(
0.50f
,
0.58f
,
0.85f
,
0.65f
)
;
style
.
Colors
[
ImGuiCol_TitleBg
]
=
ImVec4
(
0.40f
,
0.40f
,
0.39f
,
0.80f
)
;
style
.
Colors
[
ImGuiCol_TitleBgCollapsed
]
=
ImVec4
(
0.22f
,
0.39f
,
0.73f
,
0.52f
)
;
style
.
Colors
[
ImGuiCol_TitleBgActive
]
=
ImVec4
(
0.13f
,
0.41f
,
0.71f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_MenuBarBg
]
=
ImVec4
(
0.30f
,
0.31f
,
0.31f
,
0.80f
)
;
style
.
Colors
[
ImGuiCol_ScrollbarBg
]
=
ImVec4
(
0.20f
,
0.25f
,
0.30f
,
0.00f
)
;
style
.
Colors
[
ImGuiCol_ScrollbarGrab
]
=
ImVec4
(
0.40f
,
0.40f
,
0.40f
,
0.39f
)
;
style
.
Colors
[
ImGuiCol_ScrollbarGrabHovered
]
=
ImVec4
(
0.40f
,
0.40f
,
0.40f
,
0.59f
)
;
style
.
Colors
[
ImGuiCol_ScrollbarGrabActive
]
=
ImVec4
(
0.50f
,
0.50f
,
0.50f
,
0.72f
)
;
style
.
Colors
[
ImGuiCol_CheckMark
]
=
ImVec4
(
0.27f
,
0.58f
,
1.00f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_SliderGrabActive
]
=
ImVec4
(
0.20f
,
0.57f
,
1.00f
,
0.84f
)
;
style
.
Colors
[
ImGuiCol_Button
]
=
ImVec4
(
0.27f
,
0.58f
,
1.00f
,
0.78f
)
;
style
.
Colors
[
ImGuiCol_ButtonHovered
]
=
ImVec4
(
0.37f
,
0.64f
,
1.00f
,
0.94f
)
;
style
.
Colors
[
ImGuiCol_ButtonActive
]
=
ImVec4
(
0.27f
,
0.44f
,
1.00f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_Header
]
=
ImVec4
(
0.49f
,
0.49f
,
0.49f
,
0.46f
)
;
style
.
Colors
[
ImGuiCol_HeaderHovered
]
=
ImVec4
(
0.45f
,
0.45f
,
0.50f
,
0.49f
)
;
style
.
Colors
[
ImGuiCol_HeaderActive
]
=
ImVec4
(
0.53f
,
0.53f
,
0.57f
,
0.75f
)
;
style
.
Colors
[
ImGuiCol_ColumnHovered
]
=
ImVec4
(
0.60f
,
0.60f
,
0.70f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_ColumnActive
]
=
ImVec4
(
0.70f
,
0.70f
,
0.90f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_ResizeGrip
]
=
ImVec4
(
1.00f
,
1.00f
,
1.00f
,
0.47f
)
;
style
.
Colors
[
ImGuiCol_ResizeGripActive
]
=
ImVec4
(
0.78f
,
0.76f
,
1.00f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_CloseButton
]
=
ImVec4
(
0.50f
,
0.50f
,
0.50f
,
0.89f
)
;
style
.
Colors
[
ImGuiCol_CloseButtonHovered
]
=
ImVec4
(
0.70f
,
0.70f
,
0.71f
,
0.60f
)
;
style
.
Colors
[
ImGuiCol_PlotLinesHovered
]
=
ImVec4
(
0.27f
,
0.54f
,
1.00f
,
0.47f
)
;
style
.
Colors
[
ImGuiCol_PlotHistogram
]
=
ImVec4
(
0.24f
,
0.58f
,
1.00f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_PlotHistogramHovered
]
=
ImVec4
(
0.23f
,
0.47f
,
1.00f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_TextSelectedBg
]
=
ImVec4
(
0.16f
,
0.37f
,
0.98f
,
0.75f
)
;

atizoff
25.03.2019, 17:27
как то так:

C++:






ImGuiStyle
&
style
=
ImGui
::
GetStyle
(
)
;
style
.
Colors
[
ImGuiCol_Text
]
=
ImVec4
(
0.90f
,
0.90f
,
0.90f
,
0.93f
)
;
style
.
Colors
[
ImGuiCol_TextDisabled
]
=
ImVec4
(
0.60f
,
0.60f
,
0.60f
,
0.68f
)
;
style
.
Colors
[
ImGuiCol_WindowBg
]
=
ImVec4
(
0.16f
,
0.16f
,
0.16f
,
0.96f
)
;
style
.
Colors
[
ImGuiCol_PopupBg
]
=
ImVec4
(
0.10f
,
0.10f
,
0.10f
,
0.94f
)
;
style
.
Colors
[
ImGuiCol_Border
]
=
ImVec4
(
0.34f
,
0.33f
,
0.34f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_FrameBg
]
=
ImVec4
(
0.80f
,
0.80f
,
0.80f
,
0.33f
)
;
style
.
Colors
[
ImGuiCol_FrameBgHovered
]
=
ImVec4
(
0.80f
,
0.80f
,
1.00f
,
0.40f
)
;
style
.
Colors
[
ImGuiCol_FrameBgActive
]
=
ImVec4
(
0.50f
,
0.58f
,
0.85f
,
0.65f
)
;
style
.
Colors
[
ImGuiCol_TitleBg
]
=
ImVec4
(
0.40f
,
0.40f
,
0.39f
,
0.80f
)
;
style
.
Colors
[
ImGuiCol_TitleBgCollapsed
]
=
ImVec4
(
0.22f
,
0.39f
,
0.73f
,
0.52f
)
;
style
.
Colors
[
ImGuiCol_TitleBgActive
]
=
ImVec4
(
0.13f
,
0.41f
,
0.71f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_MenuBarBg
]
=
ImVec4
(
0.30f
,
0.31f
,
0.31f
,
0.80f
)
;
style
.
Colors
[
ImGuiCol_ScrollbarBg
]
=
ImVec4
(
0.20f
,
0.25f
,
0.30f
,
0.00f
)
;
style
.
Colors
[
ImGuiCol_ScrollbarGrab
]
=
ImVec4
(
0.40f
,
0.40f
,
0.40f
,
0.39f
)
;
style
.
Colors
[
ImGuiCol_ScrollbarGrabHovered
]
=
ImVec4
(
0.40f
,
0.40f
,
0.40f
,
0.59f
)
;
style
.
Colors
[
ImGuiCol_ScrollbarGrabActive
]
=
ImVec4
(
0.50f
,
0.50f
,
0.50f
,
0.72f
)
;
style
.
Colors
[
ImGuiCol_CheckMark
]
=
ImVec4
(
0.27f
,
0.58f
,
1.00f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_SliderGrabActive
]
=
ImVec4
(
0.20f
,
0.57f
,
1.00f
,
0.84f
)
;
style
.
Colors
[
ImGuiCol_Button
]
=
ImVec4
(
0.27f
,
0.58f
,
1.00f
,
0.78f
)
;
style
.
Colors
[
ImGuiCol_ButtonHovered
]
=
ImVec4
(
0.37f
,
0.64f
,
1.00f
,
0.94f
)
;
style
.
Colors
[
ImGuiCol_ButtonActive
]
=
ImVec4
(
0.27f
,
0.44f
,
1.00f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_Header
]
=
ImVec4
(
0.49f
,
0.49f
,
0.49f
,
0.46f
)
;
style
.
Colors
[
ImGuiCol_HeaderHovered
]
=
ImVec4
(
0.45f
,
0.45f
,
0.50f
,
0.49f
)
;
style
.
Colors
[
ImGuiCol_HeaderActive
]
=
ImVec4
(
0.53f
,
0.53f
,
0.57f
,
0.75f
)
;
style
.
Colors
[
ImGuiCol_ColumnHovered
]
=
ImVec4
(
0.60f
,
0.60f
,
0.70f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_ColumnActive
]
=
ImVec4
(
0.70f
,
0.70f
,
0.90f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_ResizeGrip
]
=
ImVec4
(
1.00f
,
1.00f
,
1.00f
,
0.47f
)
;
style
.
Colors
[
ImGuiCol_ResizeGripActive
]
=
ImVec4
(
0.78f
,
0.76f
,
1.00f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_CloseButton
]
=
ImVec4
(
0.50f
,
0.50f
,
0.50f
,
0.89f
)
;
style
.
Colors
[
ImGuiCol_CloseButtonHovered
]
=
ImVec4
(
0.70f
,
0.70f
,
0.71f
,
0.60f
)
;
style
.
Colors
[
ImGuiCol_PlotLinesHovered
]
=
ImVec4
(
0.27f
,
0.54f
,
1.00f
,
0.47f
)
;
style
.
Colors
[
ImGuiCol_PlotHistogram
]
=
ImVec4
(
0.24f
,
0.58f
,
1.00f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_PlotHistogramHovered
]
=
ImVec4
(
0.23f
,
0.47f
,
1.00f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_TextSelectedBg
]
=
ImVec4
(
0.16f
,
0.37f
,
0.98f
,
0.75f
)
;





сделал также, но чёт ничего




C++:





[CODE]
#include
#include
#include "imgui/imgui.h"
#include "GUI.h"
#include "Config.h"
#include "Hacks/Misc.h"
#include "Hacks/Visuals.h"
constexpr
auto
windowFlags
=
ImGuiWindowFlags_NoCollapse
|
ImGuiWindowFlags_NoResize
|
ImGuiWindowFlags_NoScrollbar
|
ImGuiWindowFlags_NoScrollWithMouse
;
void
GUI
::
style
(
)
noexcept
{
#define HI(v) ImVec4(0.502f, 0.075f, 0.256f, v)
#define MED(v) ImVec4(0.455f, 0.198f, 0.301f, v)
#define LOW(v) ImVec4(0.232f, 0.201f, 0.271f, v)
// backgrounds (@todo: complete with BG_MED, BG_LOW)
#define BG(v) ImVec4(0.200f, 0.220f, 0.270f, v)
// text
#define TEXT(v) ImVec4(0.860f, 0.930f, 0.890f, v)
auto
&
style
=
ImGui
::
GetStyle
(
)
;
style
.
Colors
[
ImGuiCol_Text
]
=
TEXT
(
0.78f
)
;
style
.
Colors
[
ImGuiCol_TextDisabled
]
=
TEXT
(
0.28f
)
;
style
.
Colors
[
ImGuiCol_WindowBg
]
=
ImVec4
(
0.13f
,
0.14f
,
0.17f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_PopupBg
]
=
BG
(
0.9f
)
;
style
.
Colors
[
ImGuiCol_Border
]
=
ImVec4
(
0.31f
,
0.31f
,
1.00f
,
0.00f
)
;
style
.
Colors
[
ImGuiCol_BorderShadow
]
=
ImVec4
(
0.00f
,
0.00f
,
0.00f
,
0.00f
)
;
style
.
Colors
[
ImGuiCol_FrameBg
]
=
BG
(
1.00f
)
;
style
.
Colors
[
ImGuiCol_FrameBgHovered
]
=
MED
(
0.78f
)
;
style
.
Colors
[
ImGuiCol_FrameBgActive
]
=
MED
(
1.00f
)
;
style
.
Colors
[
ImGuiCol_TitleBg
]
=
LOW
(
1.00f
)
;
style
.
Colors
[
ImGuiCol_TitleBgActive
]
=
HI
(
1.00f
)
;
style
.
Colors
[
ImGuiCol_TitleBgCollapsed
]
=
BG
(
0.75f
)
;
style
.
Colors
[
ImGuiCol_MenuBarBg
]
=
BG
(
0.47f
)
;
style
.
Colors
[
ImGuiCol_ScrollbarBg
]
=
BG
(
1.00f
)
;
style
.
Colors
[
ImGuiCol_ScrollbarGrab
]
=
ImVec4
(
0.09f
,
0.15f
,
0.16f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_ScrollbarGrabHovered
]
=
MED
(
0.78f
)
;
style
.
Colors
[
ImGuiCol_ScrollbarGrabActive
]
=
MED
(
1.00f
)
;
style
.
Colors
[
ImGuiCol_CheckMark
]
=
ImVec4
(
0.71f
,
0.22f
,
0.27f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_SliderGrab
]
=
ImVec4
(
0.47f
,
0.77f
,
0.83f
,
0.14f
)
;
style
.
Colors
[
ImGuiCol_SliderGrabActive
]
=
ImVec4
(
0.71f
,
0.22f
,
0.27f
,
1.00f
)
;
style
.
Colors
[
ImGuiCol_Button
]
=
ImVec4
(
0.47f
,
0.77f
,
0.83f
,
0.14f
)
;
style
.
Colors
[
ImGuiCol_ButtonHovered
]
=
MED
(
0.86f
)
;
style
.
Colors
[
ImGuiCol_ButtonActive
]
=
MED
(
1.00f
)
;
style
.
Colors
[
ImGuiCol_Header
]
=
MED
(
0.76f
)
;
style
.
Colors
[
ImGuiCol_HeaderHovered
]
=
MED
(
0.86f
)
;
style
.
Colors
[
ImGuiCol_HeaderActive
]
=
HI
(
1.00f
)
;
style
.
Colors
[
ImGuiCol_ResizeGrip
]
=
ImVec4
(
0.47f
,
0.77f
,
0.83f
,
0.04f
)
;
style
.
Colors
[
ImGuiCol_ResizeGripHovered
]
=
MED
(
0.78f
)
;
style
.
Colors
[
ImGuiCol_ResizeGripActive
]
=
MED
(
1.00f
)
;
style
.
Colors
[
ImGuiCol_PlotLines
]
=
TEXT
(
0.63f
)
;
style
.
Colors
[
ImGuiCol_PlotLinesHovered
]
=
MED
(
1.00f
)
;
style
.
Colors
[
ImGuiCol_PlotHistogram
]
=
TEXT
(
0.63f
)
;
style
.
Colors
[
ImGuiCol_PlotHistogramHovered
]
=
MED
(
1.00f
)
;
style
.
Colors
[
ImGuiCol_TextSelectedBg
]
=
MED
(
0.43f
)
;
// [...]
style
.
WindowPadding
=
ImVec2
(
6
,
4
)
;
style
.
WindowRounding
=
0.0f
;
style
.
FramePadding
=
ImVec2
(
5
,
2
)
;
style
.
FrameRounding
=
3.0f
;
style
.
ItemSpacing
=
ImVec2
(
7
,
1
)
;
style
.
ItemInnerSpacing
=
ImVec2
(
1
,
1
)
;
style
.
TouchExtraPadding
=
ImVec2
(
0
,
0
)
;
style
.
IndentSpacing
=
6.0f
;
style
.
ScrollbarSize
=
12.0f
;
style
.
ScrollbarRounding
=
16.0f
;
style
.
GrabMinSize
=
20.0f
;
style
.
GrabRounding
=
2.0f
;
style
.
WindowTitleAlign
.
x
=
0.50f
;
style
.
Colors
[
ImGuiCol_Border
]
=
ImVec4
(
0.539f
,
0.479f
,
0.255f
,
0.162f
)
;
style
.
FrameBorderSize
=
0.0f
;
style
.
WindowBorderSize
=
1.0f
;
}
void
GUI
::
render
(
)
noexcept
{
renderMenuBar
(
)
;
renderGlowWindow
(
)
;
renderVisualsWindow
(
)
;
renderMiscWindow
(
)
;
}
void
GUI
::
checkBoxAndColorPicker
(
const
std
::
string
&
name
,
bool
*
enable
,
float
*
color
)
noexcept
{
ImGui
::
Checkbox
(
(
"##"
+
name
)
.
c_str
(
)
,
enable
)
;
ImGui
::
SameLine
(
0.0f
,
5.0f
)
;
bool
openPopup
=
ImGui
::
ColorButton
(
(
"##"
+
name
+
"ColorButton"
)
.
c_str
(
)
,
ImColor
{
color
[
0
]
,
color
[
1
]
,
color
[
2
]
}
,
ImGuiColorEditFlags_NoTooltip
)
;
ImGui
::
SameLine
(
0.0f
,
5.0f
)
;
ImGui
::
Text
(
name
.
c_str
(
)
)
;
if
(
openPopup
)
ImGui
::
OpenPopup
(
(
"##"
+
name
+
"Popup"
)
.
c_str
(
)
)
;
if
(
ImGui
::
BeginPopup
(
(
"##"
+
name
+
"Popup"
)
.
c_str
(
)
)
)
{
ImGui
::
ColorPicker3
(
(
"##"
+
name
+
"Picker"
)
.
c_str
(
)
,
color
,
ImGuiColorEditFlags_DisplayRGB
|
ImGuiColorEditFlags_NoSidePreview
)
;
ImGui
::
EndPopup
(
)
;
}
}
void
GUI
::
hotkey
(
int
&
key
)
noexcept
{
ImGui
::
Text
(
(
std
::
ostringstream
{
}

CyberSuslik
27.03.2019, 19:03
Посоветуйте простенькую не тяжеловесную IDE

ALF
27.03.2019, 19:22
Посоветуйте простенькую не тяжеловесную IDE


блокнот

Sarutobi1
28.03.2019, 14:56
void *obj = *(void **)((DWORD)samp + 0x95CD0);

((void(__thiscall *) (void *, int, bool)) ((DWORD)samp + 0x95CD0))(obj, iToggle ? 3 : 0, !iToggle);

За что отвечают эти два адреса ?

DarkP1xel
28.03.2019, 16:46
void *obj = *(void **)((DWORD)samp + 0x95CD0);
((void(__thiscall *) (void *, int, bool)) ((DWORD)samp + 0x95CD0))(obj, iToggle ? 3 : 0, !iToggle);

За что отвечают эти два адреса ?


Включение/Отключение показа курсора мышки.

mrdiimax
28.03.2019, 19:59
Как занопать определенные фрагменты памяти? Пример, я знаю что врайтпроцессмемори, но как занопать несколько сразу

Cake_
29.03.2019, 00:43
Как воспроизвести аудио файл вSAMPFUNCS? Можно пример?

ALF
30.03.2019, 00:08
https://www.un4seen.com (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudW40c2Vlbi5jb20) или функция PlaySound, но с ней нельзя остановить воспроизведение


ващет можно, а вот поставить на паузу скорей всего нельзя

Belo4ka_belka
06.04.2019, 20:09
Здравствуйте, товарищи, возникла проблема. Использую moonloader, необходимо отправить сообщение через sendmessage (или postmessage) окну имея его PID. Использую для этого библиотеку ffi, которая способна выполнять win api функции через луа. Однако эта библиотека использует синтаксис СИ обычного (я так понял это C, просто я в C++ C# и С не разбираюсь, они вроде бы одно и тоже, но почему тогда разные названия :)?). Все мое движение уперлось в написании кода на СИ, который потом можно будет выполнить через луа. Приведу то, что я нарыл в гугле и попытался использовать:

Код:






ffi.cdef[[
int SendMessage(int hWnd, int Msg, int wParam, int lParam);
]]
ffi.C.SendMessage(9576, 0x1002, 0xFF, 0xFFF)




Все что внутри ffi.cdef между [[ ]] это код на СИ, я так понял нужно записать этот код так, как будто он выполнялся бы на СИ, а аргументы получит через луа, который переделает параметры под стандарты СИ. Или это экспорт функции SendMessage... UPD: погуглил, это похоже сигнатура функции... Этот код вызывает следующую ошибку:

Код:






[19:54:12.474688] (error) test.lua: C:\Games\GTA San Andreas\moonloader\test.lua:33: cannot resolve symbol 'SendMessage': Не найдена указанная процедура.




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

Прошу отнестись ко мне снисходительно, я никогда не изучал СИ и дай Бог если это мой единственный раз, когда я столкнусь с этим языком. Рассчитываю на вашу поддержку.

Imbecil
06.04.2019, 22:32
Как сделать так, чтобы по определенной команде в чат писало '/me ' и строку из test.ini файла

-raymond-
06.04.2019, 22:51
как перевести цвет uint32_t в формат rbga и как в hex

san0
06.04.2019, 23:36
Рассчитываю на вашу поддержку.


Вы попались на то, что многие функции WinAPI реализованы в двух вариантах - для строк Unicode (по правильному конечно это wide characters) и ASCII. Для простоты выбора конкретной из них используют директивы препроцессора, одна из которых на этапе компиляции сама подбирает вариацию функции на основе настроек проекта. Т.е. все функции по типу MessageBox на самом деле бывают двух вариантов - MessageBoxA и MessageBoxW, сам MessageBox - это только макрос.

Это, конечно, весьма не детальное описание, о поддержке широких символов можно почитать тут https://docs.microsoft.com/en-us/windows/desktop/LearnWin32/working-with-strings (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy9kZXNrdG9wL0xlYXJuV2luMzIvd29ya2luZy13aXRoLXN0 cmluZ3M)

В lua Вы, естественно, вручную беспокоитесь о декларировании функций, а это значит, что макроса SendMessage здесь нет, в то время как внешний символ SendMessageA присутствует в составе библиотеки user32.dll.

Lua:






function
main
(
)
local
ffi
=
require
(
'ffi'
)
ffi
.
cdef
(
'int SendMessageA(int, int, int, int);'
)
ffi
.
C
.
SendMessageA
(
9576
,
0x1002
,
0xFF
,
0xFFF
)
end

Неадекватная сова
06.04.2019, 23:50
Как сделать так, чтобы по определенной команде в чат писало '/me ' и строку из test.ini файла



C++:






string
ReadStr
(
std
::
string _Section
,
std
::
string _Key
)
{
char
str
[
256
]
;
GetPrivateProfileString
(
_Section
.
c_str
(
)
,
_Key
.
c_str
(
)
,
NULL
,
str
,
sizeof
(
str
)
,
"SAMPFUNCS\\test.ini"
)
;
return
str
;
}
string
UTF8ToANSI
(
string s
)
{
BSTR bstrWide
;
char
*
pszAnsi
;
int
nLength
;
const
char
*
pszCode
=
s
.
c_str
(
)
;
nLength
=
MultiByteToWideChar
(
CP_UTF8
,
0
,
pszCode
,
strlen
(
pszCode
)
+
1
,
NULL
,
NULL
)
;
bstrWide
=
SysAllocStringLen
(
NULL
,
nLength
)
;
MultiByteToWideChar
(
CP_UTF8
,
0
,
pszCode
,
strlen
(
pszCode
)
+
1
,
bstrWide
,
nLength
)
;
nLength
=
WideCharToMultiByte
(
CP_ACP
,
0
,
bstrWide
,
-
1
,
NULL
,
0
,
NULL
,
NULL
)
;
pszAnsi
=
new
char
[
nLength
]
;
WideCharToMultiByte
(
CP_ACP
,
0
,
bstrWide
,
-
1
,
pszAnsi
,
nLength
,
NULL
,
NULL
)
;
SysFreeString
(
bstrWide
)
;
string
r
(
pszAnsi
)
;
delete
[
]
pszAnsi
;
return
r
;
}
SFCLEO
*
SC
;
void
CALLBACK
sendChatMessage
(
string message
)
{
string thmsg
=
"0C8F: samp process_chat_input \""
+
message
+
"\""
;
SC
->
callOpcode
(
thmsg
.
c_str
(
)
)
;
}
Use
:
string szStr
=
"/me "
+
UTF8ToANSI
(
ReadStr
(
""
,
""
)
)
;
sendChatMessage
(
szStr
)
;

Belo4ka_belka
07.04.2019, 00:02
Вы попались на то, что многие функции WinAPI реализованы в двух вариантах - для строк Unicode (по правильному конечно это wide characters) и ASCII. Для простоты выбора конкретной из них используют директивы препроцессора, одна из которых на этапе компиляции сама подбирает вариацию функции на основе настроек проекта. Т.е. все функции по типу MessageBox на самом деле бывают двух вариантов - MessageBoxA и MessageBoxW, сам MessageBox - это только макрос.
Это, конечно, весьма не детальное описание, о поддержке широких символов можно почитать тут https://docs.microsoft.com/en-us/windows/desktop/LearnWin32/working-with-strings (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy9kZXNrdG9wL0xlYXJuV2luMzIvd29ya2luZy13aXRoLXN0 cmluZ3M)
В lua Вы, естественно, вручную беспокоитесь о декларировании функций, а это значит, что макроса SendMessage здесь нет, в то время как внешний символ SendMessageA присутствует в составе библиотеки user32.dll.

Lua:






function
main
(
)
local
ffi
=
require
(
'ffi'
)
ffi
.
cdef
(
'int SendMessageA(int, int, int, int);'
)
ffi
.
C
.
SendMessageA
(
9576
,
0x1002
,
0xFF
,
0xFFF
)
end





А я все думал что это за приставки к названиям функций! Теперь все без ошибок запустилось. Правда раньше я лишь подозревал, а теперь на практике понял, что PID и HWND это разные вещи, к сожалению. Но думаю с этим я уже смогу разобраться. Спасибо!

Cake_
07.04.2019, 00:29
Как получить координаты пикапе в зоне стрима?

Imbecil
07.04.2019, 00:58
кто то сталкивался с такой проблемой? крч установил Boost

C++:






boost
::
property_tree
::
ptree pt
;
boost
::
property_tree
::
ini_parser
::
read_ini
(
"time.ini"
,
pt
)
;
std
::
string patay
=
pt
.
get

(
"time.string"
)
;




пишу это, чтобы прочитать time.ini и получить значение строки. и вылазит куча ошибок в boost'e при попытке сборки проекта














https://blast.hk/attachments/27909/

boost 1.69

visual studio 2017

Cake_
07.04.2019, 12:14
кто то сталкивался с такой проблемой? крч установил Boost

C++:






boost
::
property_tree
::
ptree pt
;
boost
::
property_tree
::
ini_parser
::
read_ini
(
"time.ini"
,
pt
)
;
std
::
string patay
=
pt
.
get

(
"time.string"
)
;




пишу это, чтобы прочитать time.ini и получить значение строки. и вылазит куча ошибок в boost'e при попытке сборки проекта












https://blast.hk/attachments/27909/

boost 1.69
visual studio 2017


В начало

C++:






#include
#include
#include
#include

Harryss
07.04.2019, 15:22
кто то сталкивался с такой проблемой? крч установил Boost

C++:






boost
::
property_tree
::
ptree pt
;
boost
::
property_tree
::
ini_parser
::
read_ini
(
"time.ini"
,
pt
)
;
std
::
string patay
=
pt
.
get

(
"time.string"
)
;




пишу это, чтобы прочитать time.ini и получить значение строки. и вылазит куча ошибок в boost'e при попытке сборки проекта












https://blast.hk/attachments/27909/

boost 1.69
visual studio 2017


ты грузишь boost ради того чтобы работать с одним INI?

если да, специально для тебя

https://blast.hk/threads/22983/

Imbecil
07.04.2019, 16:53
В начало

C++:






#include
#include
#include
#include







было, не помогает



ты грузишь boost ради того чтобы работать с одним INI?
если да, специально для тебя
https://blast.hk/threads/22983/


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

C++:






SF
->
getSAMP
(
)
->
registerChatCommand
(
"time"
,
time_command
)
;
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
std
::
string str
=
INI
::
ReadString
(
"time"
,
"string"
,
1337
,
".\\time.INI"
)
;
const
char
*
result
=
&
str
[
0
]
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
result
)
;
}




гружу тут, чтобы сразу увидеть вышло ли

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

просто пустая строка

Неадекватная сова
07.04.2019, 17:25
было, не помогает

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

C++:






SF
->
getSAMP
(
)
->
registerChatCommand
(
"time"
,
time_command
)
;
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
std
::
string str
=
INI
::
ReadString
(
"time"
,
"string"
,
1337
,
".\\time.INI"
)
;
const
char
*
result
=
&
str
[
0
]
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
result
)
;
}




гружу тут, чтобы сразу увидеть вышло ли

просто пустая строка


Покажи содержимое ini файла в котором читаешь

Imbecil
07.04.2019, 18:22
Покажи содержимое ini файла в котором читаешь



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

а, файл надо было кидать директорию с сампом, а не в sampfuncs...

ALF
07.04.2019, 18:24
а, файл надо было кидать директорию с сампом, а не в sampfuncs...


std::string str = INI::ReadString("time", "string", 1337, "SAMPFUNCS\\time.INI");

Imbecil
08.04.2019, 00:05
а можно как то не добавлять сообщение в чат если в нем есть определенная строка. например, чтобы не отображались сообщения от определенных игроков

atizoff
08.04.2019, 00:14
можно пример работы с DrawText?

Неадекватная сова
08.04.2019, 00:52
а можно как то не добавлять сообщение в чат если в нем есть определенная строка. например, чтобы не отображались сообщения от определенных игроков



C++:






bool
CALLBACK
incomingRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
ScriptRPCEnumeration
::
RPC_ScrClientMessage
)
{
DWORD color
;
DWORD strlen
;
char
string
[
2048
]
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
color
)
;
params
->
bitStream
->
Read
(
strlen
)
;
params
->
bitStream
->
Read
(
string
,
strlen
)
;
string
[
strlen
]
=
'\0'
;
if
(
strlen
>
10
)
{
//Если символов в строке больше 10, значит не показывать строку
return
false
;
}
if
(
strstr
(
string
,
"Vasya_Pupok"
)
!=
0
)
{
//Если найдена произвольная строка, тогда не показывать ее
return
false
;
}
}
return
true
;
}
SF
->
getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_INCOMING_RPC
,
incomingRPC
)
;






можно пример работы с DrawText?


https://blast.hk/threads/23412/

atizoff
08.04.2019, 15:47
C++:






bool
CALLBACK
incomingRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
ScriptRPCEnumeration
::
RPC_ScrClientMessage
)
{
DWORD color
;
DWORD strlen
;
char
string
[
2048
]
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
color
)
;
params
->
bitStream
->
Read
(
strlen
)
;
params
->
bitStream
->
Read
(
string
,
strlen
)
;
string
[
strlen
]
=
'\0'
;
if
(
strlen
>
10
)
{
//Если символов в строке больше 10, значит не показывать строку
return
false
;
}
if
(
strstr
(
string
,
"Vasya_Pupok"
)
!=
0
)
{
//Если найдена произвольная строка, тогда не показывать ее
return
false
;
}
}
return
true
;
}
SF
->
getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_INCOMING_RPC
,
incomingRPC
)
;




https://blast.hk/threads/23412/


Спасибо конечно, но мне не для сампа, а в общем

Неадекватная сова
08.04.2019, 16:19
Спасибо конечно, но мне не для сампа, а в общем


D3D9? https://www.unknowncheats.me/forum/d3d-tutorials-and-source/69388-simple-drawing-text-d3d9.html (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudW5rbm93bmNoZWF0cy5tZS9mb3J1bS9kM2 QtdHV0b3JpYWxzLWFuZC1zb3VyY2UvNjkzODgtc2ltcGxlLWRy YXdpbmctdGV4dC1kM2Q5Lmh0bWw)

atizoff
08.04.2019, 20:31
D3D9? https://www.unknowncheats.me/forum/d3d-tutorials-and-source/69388-simple-drawing-text-d3d9.html (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cudW5rbm93bmNoZWF0cy5tZS9mb3J1bS9kM2 QtdHV0b3JpYWxzLWFuZC1zb3VyY2UvNjkzODgtc2ltcGxlLWRy YXdpbmctdGV4dC1kM2Q5Lmh0bWw)


Он рисует только в d3dhooks.cpp

смогу ли я рисовать в другой области?

CatKnight
08.04.2019, 22:27
Где лучше всего вызывать функцию SetCursor? Пробовал разово вставлять в колбеке команды, но так курсор не проявляется, а если запихать в презент, то всё нормально работает. Как правильно делать? Хочу юзать совместно с имгуи.

Неадекватная сова
08.04.2019, 22:45
Где лучше всего вызывать функцию SetCursor? Пробовал разово вставлять в колбеке команды, но так курсор не проявляется, а если запихать в презент, то всё нормально работает. Как правильно делать? Хочу юзать совместно с имгуи.


Если ты про SF->getSAMP()->getMisc()->ToggleCursor(), то его нужно постоянно вызывать до тех пор, пока он тебе нужен

CatKnight
08.04.2019, 22:58
Если ты про SF->getSAMP()->getMisc()->ToggleCursor(), то его нужно постоянно вызывать до тех пор, пока он тебе нужен


Не, я про системный курсор SetCursor(LoadCursor(NULL, IDC_ARROW)). Я почему-то так и подумал. Спасибо.

_Vine_
10.04.2019, 00:10
Как реализовать собственную функцию DecodeString из SF API?

C++:






void
SFRakNet
::
DecodeString
(
char
*
output
,
int
maxCharsToWrite
,
BitStream
*
input
)
;

loganhackerdff
10.04.2019, 00:15
при огткрытии файла .cpp через visual studio 2017 вместо нормальной отладки, кнопка "присоединение" , до переустановки винды было всё нормально

#Rin
10.04.2019, 01:49
Как реализовать собственную функцию DecodeString из SF API?

C++:






void
SFRakNet
::
DecodeString
(
char
*
output
,
int
maxCharsToWrite
,
BitStream
*
input
)
;





http://www.jenkinssoftware.com/raknet/manual/Doxygen/classRakNet_1_1StringCompressor.html (https://www.blast.hk/redirect/aHR0cDovL3d3dy5qZW5raW5zc29mdHdhcmUuY29tL3Jha25ldC 9tYW51YWwvRG94eWdlbi9jbGFzc1Jha05ldF8xXzFTdHJpbmdD b21wcmVzc29yLmh0bWw)



при огткрытии файла .cpp через visual studio 2017 вместо нормальной отладки, кнопка "присоединение" , до переустановки винды было всё нормально


.sln открывать надо, простой чистый .cpp файл не скомпилировать.

CatKnight
10.04.2019, 13:03
У меня вопрос насчёт выгрузки имгуи. Я посмотрел, в этой (https://blast.hk/threads/23083/) теме имгуи выгружается в GameDestructorCallback. Но там же пишется, что деструктор не вызывается при выходе из игры, и советуется выгружать его в DLL_PROCESS_DETACH. Собственно, в чём вопрос: нужно ли использовать оба способа одновременно? У меня в таком случае при выходе идёт краш игры. Если же оставить один DLL_PROCESS_DETACH, то в целом всё нормально. Как тут быть?

#Rin
10.04.2019, 14:04
У меня вопрос насчёт выгрузки имгуи. Я посмотрел, в этой (https://blast.hk/threads/23083/) теме имгуи выгружается в GameDestructorCallback. Но там же пишется, что деструктор не вызывается при выходе из игры, и советуется выгружать его в DLL_PROCESS_DETACH. Собственно, в чём вопрос: нужно ли использовать оба способа одновременно? У меня в таком случае при выходе идёт краш игры. Если же оставить один DLL_PROCESS_DETACH, то в целом всё нормально. Как тут быть?


Сделать мьютекс с проверкой, если уже вызван деструктор, то ничего не делать.

Natami
10.04.2019, 21:31
Нажимаю ctrl + f5 (чтобы скомпилировать), вылазит (см.скрин). Не особо разобрался.

Harryss
10.04.2019, 21:40
Нажимаю ctrl + f5 (чтобы скомпилировать), вылазит (см.скрин). Не особо разобрался.


дак с SF API работают на Visual Studio, на IDE, а у тебя, судя по скриншоту, VS Code.

SR_team
11.04.2019, 21:35
Подскажите пожалуйста, каким образом я могу передать метод класса в функцию registerChatCommand.


https://git.prime-hack.net/SR_team/AsiBase/src/branch/master/CGame/SAMP/SAMPInputInfo.h#L36 (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lCYXNlL3NyYy9icmFuY2gvbWFzdGVyL0NHYW1lL1NBTVAvU0FN UElucHV0SW5mby5oI0wzNg)

checkdasound
12.04.2019, 01:00
Есть адрес (0xB700F0), по которому находится ид модели машины, в которой ты находишься, но он не работает на велосипеды и мотоциклы. Есть ли аналоги и как узнать ид модели, если ты сидишь на двухколесном транспорте?

upd. уже нашел

C++:






unsigned
int
CurrentVehiclePointer
=
*
(
unsigned
int
*
)
0xBA18FC
;
unsigned
short
model
=
*
(
unsigned
short
*
)
(
CurrentVehiclePointer
+
34
)
;

_=Gigant=_
12.04.2019, 01:21
сделал также, но чёт ничего



GUI::style() must be called in render

Vintik
13.04.2019, 23:50
Всем здравствуйте. Надеюсь, эксперты помогут мне в решении проблемы. Суть в том, что хочу как-то использовать встоенные в GTA SA функции (пример: написать белый текст снизу экрана) своей программой. У DarkP1xel`я заметил следующее:



((void(__cdecl *)(PCHAR, UINT, USHORT, bool))0x69F1E0)



Но это для DLL библиотеки, я же хочу для стандартного "консольного приложения".

rumpate
14.04.2019, 17:43
Как сделать рандомный слип например от 50 до 100 мс?

_=Gigant=_
14.04.2019, 19:15
Как сделать рандомный слип например от 50 до 100 мс?



use rand() % 100

SR_team
14.04.2019, 20:17
Всем здравствуйте. Надеюсь, эксперты помогут мне в решении проблемы. Суть в том, что хочу как-то использовать встоенные в GTA SA функции (пример: написать белый текст снизу экрана) своей программой. У DarkP1xel`я заметил следующее:

Но это для DLL библиотеки, я же хочу для стандартного "консольного приложения".


Google: CreateRemoteThread

Cake_
14.04.2019, 20:47
Как получить коорды объекта / модели? Попытался сам написать, что-то не то вообщем

C++:






float
pos
[
3
]
;
for
(
int
i
=
0
;
i

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
;
pos
[
0
]
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
fPos
[
0
]
;
pos
[
1
]
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
fPos
[
1
]
;
pos
[
2
]
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
fPos
[
2
]
;

SiTrak
15.04.2019, 00:11
Как получить коорды объекта / модели? Попытался сам написать, что-то не то вообщем

C++:






float
pos
[
3
]
;
for
(
int
i
=
0
;
i

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
;
pos
[
0
]
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
fPos
[
0
]
;
pos
[
1
]
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
fPos
[
1
]
;
pos
[
2
]
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
fPos
[
2
]
;








C++:






if
(
pObj
->
iModel
==
objes
[
4
]
)
{
memcpy
(
pos
,
&
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
i
]
->
pGTAEntity
->
base
.
matrix
[
12
]
,
sizeof
(
float
)
*
3
)
;
// uint16_t model_id = SF->getSAMP()->getInfo()->pPools->pObject->object[i]->pGTAEntity->base.model_alt_id;
SF
->
getGame
(
)
->
convert3DCoordsToScreen
(
position
[
0
]
,
position
[
1
]
,
position
[
2
]
,
&
obmypos
[
0
]
,
&
obmypos
[
1
]
)
;
SF
->
getGame
(
)
->
convert3DCoordsToScreen
(
pos
[
0
]
,
pos
[
1
]
,
pos
[
2
]
,
&
obsreen
[
0
]
,
&
obsreen
[
1
]
)
;
if
(
IsOnScreen
(
i
)
)
{
SF
->
getRender
(
)
->
DrawLine
(
obmypos
[
0
]
,
obmypos
[
1
]
,
obsreen
[
0
]
,
obsreen
[
1
]
,
sizelin
[
4
]
,
0xFF00FF00
)
;
}
}

index
15.04.2019, 13:44
Небольшая абстрактная задачка: имеется объект Cell, полем которого является указатель на объект (pMan) одного из возможных других классов с разным поведением и полями(virtual не предлагать :) ). Когда указатель на Cell передадут в какую-либо функцию (в приведенном примере все происходит в main) эта функция должна будет вызывать конкретный метод объекта класса, на который указывает pMan, но в зависимости от того, на какой класс там вообще идет указание.

Код (не цепляйтесь к тому, что все паблик, суть вопроса в самой концепции):

C++:






#include
using
namespace
std
;
class
Man1
{
public
:
void
do1
(
)
{
cout

type
==
Cell
::
Type
::
man1
)
// false
static_cast

(
cell
->
pMan
)
->
do1
(
)
;
else
if
(
cell
->
type
==
Cell
::
Type
::
man2
)
// true
static_cast

(
cell
->
pMan
)
->
do2
(
)
;
// выведет Man2
return
0
;
}




И сам вопрос: как реализовать подобную вещь более адекватно и канонично? В приведенном примере конструктор Cell может схавать

C++:






Cell
(
Cell
::
Type
::
man1
,
new
Man2
)
;




и в дальнейшем получить неопределенное поведение. Хотелось бы видеть подобные ошибки на этапе компиляции.

babulya_headdyson
16.04.2019, 18:04
Как из данной строки получить "97.1445.1541.67" ?

Код:






{"as":"AS21127 JSC \"Zap-Sib TransTeleCom\", FFFFFFF","city":"FFFFFFF","country":"SSSSSS","countryCode":"RU","isp":"JSC \"Zap-Sib TransTeleCom\"","lat":12.1234,"lon":23.34,"org":"JSC Zap-Sib TransTeleCom","query":"97.1445.1541.67","region":"WER","regionName":"QWERTY","status":"success","timezone":"Asia/ESFFF","zip":"653008"}

imring
16.04.2019, 18:10
Как из данной строки получить "97.1445.1541.67" ?

Код:






{"as":"AS21127 JSC \"Zap-Sib TransTeleCom\", FFFFFFF","city":"FFFFFFF","country":"SSSSSS","countryCode":"RU","isp":"JSC \"Zap-Sib TransTeleCom\"","lat":12.1234,"lon":23.34,"org":"JSC Zap-Sib TransTeleCom","query":"97.1445.1541.67","region":"WER","regionName":"QWERTY","status":"success","timezone":"Asia/ESFFF","zip":"653008"}





https://github.com/nlohmann/json

babulya_headdyson
16.04.2019, 18:45
https://github.com/nlohmann/json


через регулярки можно же вроде без json. На LUA делал - работало.

Lua:






ip
=
text
:
match
(
'"query":"(.*)","region"'
)

Natami
17.04.2019, 20:01
DLL

Есть ли уроки по созданию меню (не imgui)?

_=Gigant=_
17.04.2019, 23:41
DLL

Есть ли уроки по созданию меню (не imgui)?



take a look in sobeit source or check unknown cheats -> directx forum

san0
18.04.2019, 03:18
Небольшая абстрактная задачка


Мне кажется, немножко детали упущены по поводу того, как это все должно использоваться. Это к тому, что, возможно, задачу можно будет свести к использованию обвертки с помощью std::bind или лямбда-выражения, либо же, всегда применить другую парадигму.

В любом случае, хотелось бы посоветовать либо использовать типобезопасный variant

C++:






#include
using
Cell
=
std
::
variant

;
void
usage_one
(
Cell cell
)
{
if
(
auto
man1
=
std
::
get_if

(
&
cell
)
)
{
(
*
man1
)
->
do1
(
)
;
}
else
if
(
auto
man2
=
std
::
get_if

(
&
cell
)
)
{
(
*
man2
)
->
do2
(
)
;
}
}




Либо, если очень хочется написать обвертку, то что-то такое

C++:






#include
namespace
std
{
template

struct
is_any
:
std
::
disjunction

.
.
.
>
{
}
;
}
template

class
CellWrapper
{
public
:
C
*
pMan
;
CellWrapper
(
C
*
ptr
)
:
pMan
(
ptr
)
{
// static_assert(std::is_class::value);
static_assert
(
std
::
is_any

::
value
,
"CellWrapper could be created only with Man1 and Man2"
)
;
}
;
C
*
operator
->
(
)
{
return
this
->
pMan
;
}
}
;
template

void
usage_two
(
CellWrapper

*
cell
)
{
if
constexpr
(
std
::
is_same

(
)
)
{
(
*
cell
)
->
do1
(
)
;
}
else
if
constexpr
(
std
::
is_same

(
)
)
{
(
*
cell
)
->
do2
(
)
;
}
}






Использование

C++:






int
main
(
void
)
{
{
auto
cell
=
Cell
(
new
Man1
)
;
usage_one
(
cell
)
;
}
{
auto
cell
=
CellWrapper
(
new
Man2
)
;
usage_two
(
&
cell
)
;
// как и просилось, именно указатель
}
}




Поправьте, если это не то, что требовалось.

P.S. В примерах выше по причине использования new была продемонстрирована утечка памяти

index
18.04.2019, 10:21
Мне кажется, немножко детали упущены по поводу того, как это все должно использоваться.


Есть массив (обертка не подойдет) объектов Cell. Из этого массива произвольным образом выбирается элемент, и, в зависимости от типа ассоциированного с ним объекта другого класса, выполняются определенные действия. По сути, полиморфизм времени выполнения. На псевдокоде это выглядит так:

Код:






// Cell type1 fileds: index, name, doSmth11(), doSmth12()
// Cell type2 fileds: cost, group, doSmth21(), doSmth22()

Cell cellArr[N];
fill(cellArr);
a = cellArr[random(0,N-1)];
if (a.type == type1)
{
a.doSmth11();
a.doSmth12();
}
else if (a.type == type2)
{
a.doSmth21();
a.doSmth22();
}




Пример больше подходит для языков с динамической типизацией, но хотелось бы увидеть реализацию подобного на c++.



P.S. Хотелось бы посоветовать не использовать new в современных проектах: начиная с C++20 new является deprecated. Даже в примерах выше по причине использования new была продемонстрирована утечка памяти


upd: На cppReference (https://www.blast.hk/redirect/aHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL21lbW 9yeS9uZXcvb3BlcmF0b3JfbmV3) ничего об этом не сказано. Также безрезультатно гуглил в других сточниках. Можно поинтересоваться, откуда информация?

san0
20.04.2019, 03:23
Хотелось бы увидеть реализацию подобного на c++


Последний из способов, наверное, наиболее благоприятный по причине низкой посадки по рантайму




C++:






#include
#include
#include
#include
#include
struct
Man1
{
unsigned
long
long
index
=
0LL
;
std
::
string name
=
"Name"
;
void
doSmth11
(
)
{
std
::
cout

index

name

cost

group

pool
;
pool
.
push_back
(
Man1
{
}
)
;
pool
.
push_back
(
Man2
{
}
)
;
for
(
auto
&&
e
:
pool
)
{
if
(
std
::
type_index
(
e
.
type
(
)
)
==
std
::
type_index
(
typeid
(
Man1
)
)
)
{
auto
restoredMan1
=
std
::
any_cast

(
e
)
;
restoredMan1
.
doSmth11
(
)
;
restoredMan1
.
doSmth12
(
)
;
}
else
if
(
e
.
type
(
)
.
hash_code
(
)
==
typeid
(
Man2
)
.
hash_code
(
)
)
{
auto
restoredMan2
=
std
::
any_cast

(
e
)
;
restoredMan2
.
doSmth21
(
)
;
restoredMan2
.
doSmth22
(
)
;
}
}
}









C++:






#include
#include
struct
ManEssential
{
virtual
void
__unused
(
void
)
{
}
;
}
;
struct
Man1
:
ManEssential
{
unsigned
long
long
index
=
0LL
;
std
::
string name
=
"Name"
;
void
doSmth11
(
)
{
std
::
cout

index

name

cost

group

pool
;
pool
.
push_back
(
new
Man2
)
;
pool
.
push_back
(
new
Man1
)
;
for
(
auto
&&
e
:
pool
)
{
if
(
auto
restoredMan1
=
dynamic_cast

(
e
)
)
{
restoredMan1
->
doSmth11
(
)
;
restoredMan1
->
doSmth12
(
)
;
}
else
if
(
auto
restoredMan2
=
dynamic_cast

(
e
)
)
{
restoredMan2
->
doSmth21
(
)
;
restoredMan2
->
doSmth22
(
)
;
}
}
}









C++:






#include
#include
struct
Man1
{
unsigned
long
long
index
=
0LL
;
std
::
string name
=
"Name"
;
void
doSmth11
(
)
{
std
::
cout

index

name

cost

group

ObjectSlicing
(
const
T
&&
man
)
:
type
(
[
=
]
{
if
constexpr
(
std
::
is_same

(
)
)
{
return
ManSubtype
::
kMan1
;
}
else
if
constexpr
(
std
::
is_same

(
)
)
{
return
ManSubtype
::
kMan2
;
}
}
(
)
)
{
}
}
;
int
main
(
)
{
std
::
vector

pool
;
pool
.
push_back
(
ObjectSlicing
(
Man1
{
}
)
)
;
pool
.
push_back
(
ObjectSlicing
(
Man2
{
}
)
)
;
for
(
auto
&&
e
:
pool
)
{
if
(
e
.
type
==
ManSubtype
::
kMan1
)
{
Man1 restoredMan1
=
e
;
restoredMan1
.
doSmth11
(
)
;
restoredMan1
.
doSmth12
(
)
;
}
else
if
(
e
.
type
==
ManSubtype
::
kMan2
)
{
Man2 restoredMan2
=
e
;
restoredMan2
.
doSmth21
(
)
;
restoredMan2
.
doSmth22
(
)
;
}
}
}









Можно поинтересоваться, откуда информация?


Первоапрельская шутка 2018 года, не воспринимайте всерьез

http://modernescpp.com/index.php/no-new-new (https://www.blast.hk/redirect/aHR0cDovL21vZGVybmVzY3BwLmNvbS9pbmRleC5waHAvbm8tbm V3LW5ldw)



Каким образом можно поменять расположение киллстата по вертикали?


samp.dll + 0x66655 =>

patch 5 bytes to mov eax,00000010, where 0x10 - Y offset

samp.dll + 0x66668 =>

patch 5 bytes to mov eax,00000020, where 0x20 - X offset

Cake_
20.04.2019, 21:16
Дайте функцию бега на сф, пожалуйста не кидайте соб

ALF
21.04.2019, 04:48
Либо я дико туплю, либо это отступы между строчками и отступы самих ников, а не расположение киллиста. Покопавшись, понял, что положение киллстата зависит от игрового разрешения. Тот плагин, который я кидал, как-то подменяет это самое разрешение, но при этом остальные части (худ, чат и т.д). никак не изменяет. При выгрузке плагина, киллстат встаёт на своё место. Интересная задумка, но не могу придумать, как можно заблокировать изменение остальных элементов, чтобы двигать только киллстат. Но спасибо за помощь.


не, ты какую то хрень написал.

DWORD addrX = samp.dll + 0x6665C;

DWORD addrY = samp.dll + 0x66645;

checkdasound
21.04.2019, 20:30
Пытаюсь переделать свой скрипт в аси формат. Все сделал, кроме нормальной эмуляции игровых клавиш. Нынешняя эмуляция работает через раз.




C++:






#include "main.h"
void
__cdecl
thread
(
void
*
pArg
)
{
while
(
true
)
{
Sleep
(
1
)
;
if
(
isKeyDown
(
0x31
)
)
{
if
(
IsCharOnFoot
(
)
)
{
SetGameKeyState
(
0x20
,
255
)
;
Sleep
(
10
)
;
SetGameKeyState
(
0x20
,
0
)
;
GTAfunc_showStyledText
(
"ON FOOT"
,
2000
,
1
)
;
}
}
if
(
isKeyDown
(
0xA0
)
)
{
if
(
IsCharInAnyCar
(
)
)
{
type
=
CurrentVehicleModelType
(
)
;
if
(
type
==
1
)
{
SetGameKeyState
(
0x20
,
255
)
;
Sleep
(
10
)
;
SetGameKeyState
(
0x20
,
0
)
;
GTAfunc_showStyledText
(
"ON BIKE"
,
2000
,
1
)
;
}
else
if
(
type
==
2
)
{
SetGameKeyState
(
0x2
,
-
128
)
;
Sleep
(
10
)
;
SetGameKeyState
(
0x2
,
0
)
;
GTAfunc_showStyledText
(
"ON MOTO"
,
2000
,
1
)
;
}
}
}
}
}
BOOL APIENTRY
DllMain
(
HINSTANCE hinstDLL
,
DWORD fdwReason
,
LPVOID lpReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
{
_beginthread
(
thread
,
0
,
nullptr
)
;
return
TRUE
;
}
}










C++:






#include
#include
#include
DWORD CPed
=
0xB6F5F0
;
DWORD CPedStatus
=
0x530
;
DWORD ProcID
;
DWORD p1
;
HANDLE hProcess
;
unsigned
int
CurrentVehiclePointer
=
0xBA18FC
;
int
Model
=
0
;
int
Status
=
0
;
int
type
;
unsigned
long
temp
;
int
bike
[
3
]
=
{
481
,
509
,
510
}
;
int
moto
[
11
]
=
{
448
,
461
,
462
,
463
,
468
,
471
,
521
,
522
,
523
,
581
,
586
}
;
using
namespace
std
;
DWORD
GetProcId
(
const
char
*
procname
)
{
PROCESSENTRY32 pe
;
HANDLE hSnap
;
pe
.
dwSize
=
sizeof
(
PROCESSENTRY32
)
;
hSnap
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPPROCESS
,
NULL
)
;
if
(
Process32First
(
hSnap
,
&
pe
)
)
{
do
{
if
(
strcmp
(
pe
.
szExeFile
,
procname
)
==
0
)
break
;
}
while
(
Process32Next
(
hSnap
,
&
pe
)
)
;
}
return
pe
.
th32ProcessID
;
}
void
SetGameKeyState
(
BYTE key
,
BYTE state
)
{
p1
=
0xB73458
+
key
;
memset
(
(
void
*
)
p1
,
state
,
1
)
;
}
;
bool
isKeyDown
(
int
key
)
{
SHORT keyState
=
GetKeyState
(
key
)
;
return
(
keyState
&
0x8000
)
;
}
void
GTAfunc_showStyledText
(
const
char
*
text
,
int
time
,
int
style
)
{
(
(
void
(
__cdecl
*
)
(
const
char
*
text
,
int
time
,
int
style
)
)
(
0x0069F2B0
)
)
(
text
,
time
,
style
)
;
}
int
CurrentPedStatus
(
)
{
ProcID
=
GetProcId
(
"gta_sa.exe"
)
;
hProcess
=
OpenProcess
(
PROCESS_ALL_ACCESS
,
FALSE
,
ProcID
)
;
ReadProcessMemory
(
hProcess
,
reinterpret_cast

(
CPed
)
,
&
temp
,
sizeof
(
temp
)
,
0
)
;
CPedStatus
=
temp
+
0x530
;
ReadProcessMemory
(
hProcess
,
reinterpret_cast

(
CPedStatus
)
,
&
Status
,
sizeof
(
temp
)
,
0
)
;
return
Status
;
}
bool
IsCharInAnyCar
(
)
{
Status
=
CurrentPedStatus
(
)
;
if
(
Status
==
50
)
{
return
true
;
}
else
{
return
false
;
}
}
bool
IsCharOnFoot
(
)
{
Status
=
CurrentPedStatus
(
)
;
if
(
Status
==
1
)
{
return
true
;
}
else
{
return
false
;
}
}
int
CurrentVehicleModelType
(
)
{
unsigned
int
CurrentVehiclePointer
=
*
(
unsigned
int
*
)
0xBA18FC
;
unsigned
short
model
=
*
(
unsigned
short
*
)
(
CurrentVehiclePointer
+
34
)
;
if
(
IsCharInAnyCar
(
)
)
{
for
(
int
counter
=
0
;
counter

NULL
)
kPressingKeys
[
Key
]
.
dwStartTime
=
GetTickCount
(
)
;
return
TRUE
;
}
}
else
kPressingKeys
[
Key
]
.
bPressed
=
FALSE
;
return
FALSE
;
}

CleanLegend
21.04.2019, 20:40
Пытаюсь переделать свой скрипт в аси формат. Все сделал, кроме нормальной эмуляции игровых клавиш. Нынешняя эмуляция работает через раз.



C++:






#include "main.h"
void
__cdecl
thread
(
void
*
pArg
)
{
while
(
true
)
{
Sleep
(
1
)
;
if
(
isKeyDown
(
0x31
)
)
{
if
(
IsCharOnFoot
(
)
)
{
SetGameKeyState
(
0x20
,
255
)
;
Sleep
(
10
)
;
SetGameKeyState
(
0x20
,
0
)
;
GTAfunc_showStyledText
(
"ON FOOT"
,
2000
,
1
)
;
}
}
if
(
isKeyDown
(
0xA0
)
)
{
if
(
IsCharInAnyCar
(
)
)
{
type
=
CurrentVehicleModelType
(
)
;
if
(
type
==
1
)
{
SetGameKeyState
(
0x20
,
255
)
;
Sleep
(
10
)
;
SetGameKeyState
(
0x20
,
0
)
;
GTAfunc_showStyledText
(
"ON BIKE"
,
2000
,
1
)
;
}
else
if
(
type
==
2
)
{
SetGameKeyState
(
0x2
,
-
128
)
;
Sleep
(
10
)
;
SetGameKeyState
(
0x2
,
0
)
;
GTAfunc_showStyledText
(
"ON MOTO"
,
2000
,
1
)
;
}
}
}
}
}
BOOL APIENTRY
DllMain
(
HINSTANCE hinstDLL
,
DWORD fdwReason
,
LPVOID lpReserved
)
{
if
(
fdwReason
==
DLL_PROCESS_ATTACH
)
{
_beginthread
(
thread
,
0
,
nullptr
)
;
return
TRUE
;
}
}









C++:






#include
#include
#include
DWORD CPed
=
0xB6F5F0
;
DWORD CPedStatus
=
0x530
;
DWORD ProcID
;
DWORD p1
;
HANDLE hProcess
;
unsigned
int
CurrentVehiclePointer
=
0xBA18FC
;
int
Model
=
0
;
int
Status
=
0
;
int
type
;
unsigned
long
temp
;
int
bike
[
3
]
=
{
481
,
509
,
510
}
;
int
moto
[
11
]
=
{
448
,
461
,
462
,
463
,
468
,
471
,
521
,
522
,
523
,
581
,
586
}
;
using
namespace
std
;
DWORD
GetProcId
(
const
char
*
procname
)
{
PROCESSENTRY32 pe
;
HANDLE hSnap
;
pe
.
dwSize
=
sizeof
(
PROCESSENTRY32
)
;
hSnap
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPPROCESS
,
NULL
)
;
if
(
Process32First
(
hSnap
,
&
pe
)
)
{
do
{
if
(
strcmp
(
pe
.
szExeFile
,
procname
)
==
0
)
break
;
}
while
(
Process32Next
(
hSnap
,
&
pe
)
)
;
}
return
pe
.
th32ProcessID
;
}
void
SetGameKeyState
(
BYTE key
,
BYTE state
)
{
p1
=
0xB73458
+
key
;
memset
(
(
void
*
)
p1
,
state
,
1
)
;
}
;
bool
isKeyDown
(
int
key
)
{
SHORT keyState
=
GetKeyState
(
key
)
;
return
(
keyState
&
0x8000
)
;
}
void
GTAfunc_showStyledText
(
const
char
*
text
,
int
time
,
int
style
)
{
(
(
void
(
__cdecl
*
)
(
const
char
*
text
,
int
time
,
int
style
)
)
(
0x0069F2B0
)
)
(
text
,
time
,
style
)
;
}
int
CurrentPedStatus
(
)
{
ProcID
=
GetProcId
(
"gta_sa.exe"
)
;
hProcess
=
OpenProcess
(
PROCESS_ALL_ACCESS
,
FALSE
,
ProcID
)
;
ReadProcessMemory
(
hProcess
,
reinterpret_cast

(
CPed
)
,
&
temp
,
sizeof
(
temp
)
,
0
)
;
CPedStatus
=
temp
+
0x530
;
ReadProcessMemory
(
hProcess
,
reinterpret_cast

(
CPedStatus
)
,
&
Status
,
sizeof
(
temp
)
,
0
)
;
return
Status
;
}
bool
IsCharInAnyCar
(
)
{
Status
=
CurrentPedStatus
(
)
;
if
(
Status
==
50
)
{
return
true
;
}
else
{
return
false
;
}
}
bool
IsCharOnFoot
(
)
{
Status
=
CurrentPedStatus
(
)
;
if
(
Status
==
1
)
{
return
true
;
}
else
{
return
false
;
}
}
int
CurrentVehicleModelType
(
)
{
unsigned
int
CurrentVehiclePointer
=
*
(
unsigned
int
*
)
0xBA18FC
;
unsigned
short
model
=
*
(
unsigned
short
*
)
(
CurrentVehiclePointer
+
34
)
;
if
(
IsCharInAnyCar
(
)
)
{
for
(
int
counter
=
0
;
counter

NULL
)
kPressingKeys
[
Key
]
.
dwStartTime
=
GetTickCount
(
)
;
return
TRUE
;
}
}
else
kPressingKeys
[
Key
]
.
bPressed
=
FALSE
;
return
FALSE
;
}








Для нормальной эмуляции клавиш нужно хукать функцию, которая отвечает за нажатие игровых клавиш. https://git.prime-hack.net/SR_team/AsiBase/src/branch/master/sys/SREvents.cpp#L432 (https://www.blast.hk/redirect/aHR0cHM6Ly9naXQucHJpbWUtaGFjay5uZXQvU1JfdGVhbS9Bc2 lCYXNlL3NyYy9icmFuY2gvbWFzdGVyL3N5cy9TUkV2ZW50cy5j cHAjTDQzMg)

Как вариант можешь вызывать функции SF или WinAPI. и не используй RPM и WPM в dll

Шурик
22.04.2019, 15:23
Столкнулся с такой проблемой:

- В цикле стоит проверка на зажатую клавишу (VK_LMENU), если нажата - выводит сообщение. Если же я с рабочего стола перейду в игру (через Alt + Tab), то это сообщение будет выводиться до первого нажатия на клавишу Alt. Использовал функцию SF->getGame()->isKeyDown и ImGui::IsKeyDown - результат один.

P.S. Замечу, сама игра не обрабатывают эту клавишу (ну тип персонаж не ходит на альте), а данные функции обрабатывают.

Есть ли способ решить данную проблему?

qojqva
22.04.2019, 18:19
Можно на c++ сделать биндер для рп?

SiTrak
22.04.2019, 18:36
Можно на c++ сделать биндер для рп?


Ну да

qojqva
22.04.2019, 18:58
Ну да


Почему я ни разу не видел биндер на С++?

MrPlayerYT
22.04.2019, 19:05
Почему я ни разу не видел биндер на С++?


Зачем использовать пушку для стрельбы по воробьям?

_=Gigant=_
22.04.2019, 22:21
Cannot open include file: 'd3dx9.h'
Как это пофиксить? До переустановки студии всё было нормально. DirectX 9 установлен.



located in VC++ Directories

https://i.imgur.com/F3ygysJ.jpg

qojqva
27.04.2019, 19:58
Как сделать биндер?

ШPEK
27.04.2019, 21:33
Как сделать биндер?


Вам не сюда

sdfaw
28.04.2019, 03:44
Как сделать биндер?


первый раз такого извращенца вижу. для биндеров луа и ахк, но не с++

ImPasha
28.04.2019, 10:39
Вам не сюда





первый раз такого извращенца вижу. для биндеров луа и ахк, но не с++


Что вы такие? Вдруг человеку нечего делать и он решил сделать ASI-биндер!

qojqva
29.04.2019, 11:19
Что вы такие? Вдруг человеку нечего делать и он решил сделать ASI-биндер!


Не ну реально я ни разу не видел ASI биндер, почему такие никто не делает? СКажите?

sdfaw
29.04.2019, 15:26
Не ну реально я ни разу не видел ASI биндер, почему такие никто не делает? СКажите?


зачем?

Roger571
29.04.2019, 17:07
Не ну реально я ни разу не видел ASI биндер, почему такие никто не делает? СКажите?


Реализация на скриптовом языке гораздо проще, никакие преимущества компилируемого в данном случае не будут раскрыты.

Но опять же, если ты любишь извращаться - вперед, никто не вправе тебе это запретить

Receiver
01.05.2019, 19:06
Как получить текст с TextDraw?

Imbecil
01.05.2019, 23:44
Можно ли как получить эти оба массива чисел? На стадии отрисовки или после.

ШPEK
02.05.2019, 19:28
Как кликнуть на текстдрав?

randazzo
02.05.2019, 19:34
Как кликнуть на текстдрав?



C++:






SF
->
getSAMP
(
)
->
sendClickTextDraw
(
1
)
;




Без сф - заполнить rpc clicktextdraw (https://blast.hk/wiki/samp:rpc_clicktextdraw) и отправить

atizoff
02.05.2019, 22:07
есть пример подключения imgui к d3d9 игре?

Cake_
03.05.2019, 00:16
есть пример подключения imgui к d3d9 игре?



C++:





[CODE]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "CDetour/CDetour.h"
#include "ImGui/imgui.h"
#include "ImGui/imgui_impl_dx9.h"
#include "ImGui/imgui_internal.h"
#pragma comment( lib, "winmm.lib" )
#pragma comment( lib, "d3d9.lib" )
#pragma comment( lib, "d3dx9.lib" )
CDetour d3dcreateDetour
;
CDetour d3d9endsceneDetour
;
CDetour d3d9resetDetour
;
ID3DXFont
*
Fonte
;
IDirect3DDevice9
*
pInterface
;
bool
CriarComponentes
=
true
;
bool
b2
=
false
;
int
__stdcall
DllMain
(
HMODULE
,
DWORD
,
LPVOID
)
;
void
ApplyHooks
(
int
)
;
void
__stdcall
myCreateDevice
(
IDirect3D9
*
,
UINT
,
D3DDEVTYPE
,
HWND
,
DWORD
,
D3DPRESENT_PARAMETERS
*
,
IDirect3DDevice9
*
*
)
;
void
__stdcall
myEndScene
(
IDirect3DDevice9
*
)
;
HRESULT __stdcall
myReset
(
IDirect3DDevice9
*
,
D3DPRESENT_PARAMETERS
*
)
;
WNDPROC oriWndProc
=
NULL
;
extern
LRESULT
ImGui_ImplDX9_WndProcHandler
(
HWND hWnd
,
UINT msg
,
WPARAM wParam
,
LPARAM lParam
)
;
bool
isImGUiOK
=
false
,
testbool
;
float
testslider
;
bool
bShowMenu
;
D3DDEVICE_CREATION_PARAMETERS d3dcp
;
LRESULT CALLBACK
hWndProc
(
HWND hwnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
{
if
(
ImGui_ImplDX9_WndProcHandler
(
hwnd
,
uMsg
,
wParam
,
lParam
)
&&
GetKeyState
(
VK_INSERT
)
==
1
)
{
return
1l
;
}
return
CallWindowProc
(
oriWndProc
,
hwnd
,
uMsg
,
wParam
,
lParam
)
;
}
void
MenuRender
(
)
{
if
(
!
bShowMenu
)
return
;
std
::
cout

DrawTextA
(
NULL
,
sTexto
,
-
1
,
&
Rect2
,
DT_NOCLIP
,
0xFF000000
)
;
Fonte
->
DrawTextA
(
NULL
,
sTexto
,
-
1
,
&
Rect
,
0
,
Cor
)
;
}
void
__stdcall
myEndScene
(
LPDIRECT3DDEVICE9 UnidadeD3D9
)
{
if
(
CriarComponentes
)
{
D3DXCreateFontA
(
UnidadeD3D9
,
16
,
0
,
FW_BOLD
,
0
,
FALSE
,
DEFAULT_CHARSET
,
OUT_TT_ONLY_PRECIS
,
6
,
DEFAULT_PITCH
|
FF_DONTCARE
,
"Arial"
,
&
Fonte
)
;
CriarComponentes
=
false
;
}
if
(
Fonte
)
WriteTextOnScreen
(
10
,
10
,
D3DCOLOR_ARGB
(
255
,
0
,
255
,
0
)
,
"Testing D3D9 SRO Hooking !"
)
;
if
(
!
isImGUiOK
)
{
ImGuiIO
&
io
=
ImGui
::
GetIO
(
)
;
io
.
DeltaTime
=
1.0f
/
60.0f
;
UnidadeD3D9
->
GetCreationParameters
(
&
d3dcp
)
;
io
.
Fonts
->
AddFontDefault
(
)
;
if
(
!
ImGui_ImplDX9_Init
(
&
d3dcp
,
UnidadeD3D9
)
)
std
::
cout

GetRenderState
(
D3DRS_COLORWRITEENABLE
,
&
dwOld_D3DRS_COLORWRITEENABLE
)
;
// Lets us draw without Net_Graph
UnidadeD3D9
->
SetRenderState
(
D3DRS_COLORWRITEENABLE
,
0xffffffff
)
;
MenuRender
(
)
;
UnidadeD3D9
->
SetRenderState
(
D3DRS_COLORWRITEENABLE
,
dwOld_D3DRS_COLORWRITEENABLE
)
;
ImGui
::
GetIO
(
)
.
MouseDrawCursor
=
bShowMenu
;
}
HRESULT __stdcall
myReset
(
IDirect3DDevice9
*
UnidadeD3D9
,
D3DPRESENT_PARAMETERS
*
PresentationParameters
)
{
__asm pushad
if
(
Fonte
)
{
Fonte
->
OnLostDevice
(
)
;
}
HRESULT hRetn
=
(
HRESULT
)
d3d9resetDetour
.
Org
(
UnidadeD3D9
,
PresentationParameters
)
;
if
(
SUCCEEDED
(
hRetn
)
)
{
if
(
Fonte
)
Fonte
->
OnResetDevice
(
)
;
}
__asm popad
return
hRetn
;
}
void
__stdcall
myCreateDevice
(
IDirect3D9
*
d3d
,
UINT Adapter
,
D3DDEVTYPE DeviceType
,
HWND hFocusWindow
,
DWORD BehaviorFlags
,
D3DPRESENT_PARAMETERS
*
pPresentationParameters
,
IDirect3DDevice9
*
*
ppReturnedDeviceInterface
)
{
d3dcreateDetour
.
Org
(
d3d
,
Adapter
,
DeviceType
,
hFocusWindow
,
BehaviorFlags
,
pPresentationParameters
,
ppReturnedDeviceInterface
)
;
pInterface
=
*
ppReturnedDeviceInterface
;
if
(
!
b2
)
ApplyHooks
(
2
)
;
}
void
ApplyHooks
(
int
nType
)
{
if
(
nType
==
1
)
{
unsigned
long
*
pD3DVTable
;
IDirect3D9
*
pD3D
=
Direct3DCreate9
(
D3D_SDK_VERSION
)
;
if
(
!
pD3D
)
// INVALID OBJECT
return
;
pD3DVTable
=
(
unsigned
long
*
)
*
(
unsigned
long
*
)
pD3D
;
pD3D
->
Release
(
)
;
// pD3DVTable[16] = IDirect3D9::CreateDevice
d3dcreateDetour
.
Detour
(
(
unsigned
char
*
)
pD3DVTable
[
16
]
,
(
unsigned
char
*
)
myCreateDevice
)
;
d3dcreateDetour
.
Apply
(
)
;
}
else
if
(
nType
==
2
)
{
unsigned
long
*
pD3D9VTable
;
if
(
!
pInterface
)
return
;
pD3D9VTable
=
(
unsigned
long
*
)
*
(
unsigned
long
*
)
pInterface
;
// pD3D9VTable[42] = IDirect3DDevice9::EndScene
d3d9endsceneDetour
.
Detour
(
(
unsigned
char
*
)
pD3D9VTable
[
42
]
,
(
unsigned
char
*
)
myEndScene
,
true
)
;
d3d9endsceneDetour
.
Apply
(
)
;
// pD3D9VTable[16] = IDirect3DDevice9::Reset
d3d9resetDetour
.
Detour
(
(
unsigned
char
*
)
pD3D9VTable
[
16
]
,
(
unsigned
char
*
)
myReset
)
;
d3d9resetDetour
.
Apply
(
)
;
b2
=
true
;
}
}
void
User_Initialize
(
)
{
Sleep
(
2000
)
;
oriWndProc
=
(
WNDPROC
)
SetWindowLongPtr
(
FindWindow
(
NULL
,
"SRO_Client"
)
,
GWL_WNDPROC
,
(
LONG
)
(
LONG_PTR
)
hWndProc
)
;
if
(
oriWndProc
==
NULL
)
std
::
cout





есть пример подключения imgui к d3d9 игре?


https://github.com/ocornut/imgui

Receiver
03.05.2019, 14:17
https://blast.hk/threads/24644/ где тут imgui шрифт запихнуть

Cake_
03.05.2019, 14:56
https://blast.hk/threads/24644/ где тут imgui шрифт запихнуть


В инициализацию окна

Receiver
03.05.2019, 14:57
как сделать проверку лицензии

Cake_
03.05.2019, 14:59
как сделать проверку лицензии


Всмысле лицензии? Точнее выражайся

TheUnity
03.05.2019, 17:44
Всмысле лицензии? Точнее выражайся


ну типо он выдает ключ, а пользователь активирует плагин, я так понял

astap_
03.05.2019, 21:09
как сделать проверку лицензии


самый хуёвый вариант. обойдёт даже мамин хакер, но тебе будет норм думаю.

Код:






// если тебе для сампа, то засунь в DllMain
char VolumeNameBuffer[255], FileSystemNameBuffer[255];
DWORD VolumeSerialNumber, MaximumComponentLength, FileSystemFlags;
GetVolumeInformation("C:\\", VolumeNameBuffer, 255, &VolumeSerialNumber, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, 255);

if (VolumeSerialNumber != 3232323221) return FALSE;

checkdasound
04.05.2019, 02:49
есть пример подключения imgui к d3d9 игре?


https://github.com/OneshotGH/DirectX9-ImGui-Implementation-Hook

Видео-объяснение:

Receiver
04.05.2019, 14:16
как сделать настраиваемую(типа можно время указать) задержку перед отжатием клавиши ?

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

rraggerr
04.05.2019, 14:18
как сделать настраиваемую(типа можно время указать) задержку перед отжатием клавиши ?


std::this_thread::sleep_for( 10ms );

Receiver
04.05.2019, 14:22
std::this_thread::sleep_for( 10ms );



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

студия 2013

atizoff
04.05.2019, 14:27
https://github.com/OneshotGH/DirectX9-ImGui-Implementation-Hook

Видео-объяснение:


Огромное тебе спасибо, единственный, кто смог помочь

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

Теперь созрел ещё вопрос. Как сделать открытие и закрытие по кнопке?

upd: всё, разобрался, сделал

Revalto
04.05.2019, 14:31
Огромное тебе спасибо, единственный, кто смог помочь

Теперь созрел ещё вопрос. Как сделать открытие и закрытие по кнопке?


Варфейс не детектит DLL с рендером?

atizoff
04.05.2019, 14:35
Варфейс не детектит DLL с рендером?


нет, всё зависит от твоего инжектора, и способа инжекта

у меня manual map thread hijacking вроде

rraggerr
04.05.2019, 14:44
студия 2013


подключи thread

Receiver
04.05.2019, 14:54
подключи thread



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

atizoff
04.05.2019, 14:57
ребята, как это сделать(по скрину поймёте идею)

в луа это бы сделалось так:

ImGui.Text("ur fov"..fov)

а как это сделать на плюсах?

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

astap_
04.05.2019, 15:05
ребята, как это сделать(по скрину поймёте идею)
в луа это бы сделалось так:
ImGui.Text("ur fov"..fov)
а как это сделать на плюсах?


?

Код:






ImGui::Text("ur fov: %i", fov);

atizoff
04.05.2019, 15:06
%i


а можно фулл? ну то есть за что отвечает %i и другие?

rraggerr
04.05.2019, 15:06
а можно фулл? ну то есть за что отвечает %i и другие?


https://ru.wikipedia.org/wiki/Система_типов_Си (https://www.blast.hk/redirect/aHR0cHM6Ly9ydS53aWtpcGVkaWEub3JnL3dpa2kvJUQwJUExJU QwJUI4JUQxJTgxJUQxJTgyJUQwJUI1JUQwJUJDJUQwJUIwXyVE MSU4MiVEMCVCOCVEMCVCRiVEMCVCRSVEMCVCMl8lRDAlQTElRD AlQjg)

astap_
04.05.2019, 15:08
а можно фулл? ну то есть за что отвечает %i и другие?


гугли спецификаторы си

sdfaw
04.05.2019, 18:04
скачать проект с подключённым имгуи отсюда, решил скомпилировать но

https://i.imgur.com/3ncnxoj.png

https://i.imgur.com/038kCbG.png

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

ШPEK
04.05.2019, 18:10
скачать проект с подключённым имгуи отсюда, решил скомпилировать но

https://i.imgur.com/3ncnxoj.png

https://i.imgur.com/038kCbG.png

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


https://stackoverflow.com/questions/41631576/cannot-open-source-file-d3dx9-h (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvND E2MzE1NzYvY2Fubm90LW9wZW4tc291cmNlLWZpbGUtZDNkeDkt aA)

И поставь vc++ версию самую новую в свойствах проекта

sdfaw
04.05.2019, 18:16
https://stackoverflow.com/questions/41631576/cannot-open-source-file-d3dx9-h (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvND E2MzE1NzYvY2Fubm90LW9wZW4tc291cmNlLWZpbGUtZDNkeDkt aA)
И поставь vc++ версию самую новую в свойствах проекта


не помогает

atizoff
04.05.2019, 18:20
не помогает


гугл в помощь -- https://yougame.biz/threads/29979/ (https://www.blast.hk/redirect/aHR0cHM6Ly95b3VnYW1lLmJpei90aHJlYWRzLzI5OTc5Lw)

ещё https://yougame.biz/threads/16445/ (https://www.blast.hk/redirect/aHR0cHM6Ly95b3VnYW1lLmJpei90aHJlYWRzLzE2NDQ1Lw)

sdfaw
04.05.2019, 18:23
гугл в помощь -- https://yougame.biz/threads/29979/ (https://www.blast.hk/redirect/aHR0cHM6Ly95b3VnYW1lLmJpei90aHJlYWRzLzI5OTc5Lw)
ещё https://yougame.biz/threads/16445/ (https://www.blast.hk/redirect/aHR0cHM6Ly95b3VnYW1lLmJpei90aHJlYWRzLzE2NDQ1Lw)


чё за ***ня

Ranto
04.05.2019, 18:42
общий вопрос

какой версии vs вы используете

ШPEK
04.05.2019, 18:57
общий вопрос
какой версии vs вы используете


VS 2017

Imbecil
04.05.2019, 19:11
Можно ли как получить эти оба массива чисел? На стадии отрисовки или после.

https://blast.hk/attachments/29156/

checkdasound
04.05.2019, 19:42
общий вопрос
какой версии vs вы используете


2013

Cake_
04.05.2019, 21:01
общий вопрос
какой версии vs вы используете


2019 pro

Receiver
04.05.2019, 21:09
как получить расстояние от нашего персонажа до другого игрока, типа проверку сделать

ImPasha
04.05.2019, 21:16
общий вопрос
какой версии vs вы используете


VS 2019 для евреев (Community)



чё за ***ня


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

atizoff
04.05.2019, 21:21
чё за ***ня


пиздец, если ты не умеешь гуглить и вообще подключать lib и include лучше не лезь сюда. то, что я тебе скинул, написал Крайслер, добрый и опытный программист, объяснил он в теме всё на языке мартышек, которые скачали проект и не понимают куда тыкать

Cake_
04.05.2019, 21:57
как получить расстояние от нашего персонажа до другого игрока, типа проверку сделать



C++:






float
GetDistance
(
D3DXVECTOR3 target
,
D3DXVECTOR3 target_2
)
{
return
sqrt
(
(
target_2
.
x
-
target
.
x
)
*
(
target_2
.
x
-
target
.
x
)
+
(
target_2
.
y
-
target
.
y
)
*
(
target_2
.
y
-
target
.
y
)
+
(
target_2
.
z
-
target
.
z
)
*
(
target_2
.
z
-
target
.
z
)
)
;
}




Функция принимает два аргумента и возвращает между ними дистанцию.

Получение своих координат:

C++:






// float coords[3];
coords
[
0
]
=
PEDSELF
->
GetPosition
(
)
->
fX
;
coords
[
1
]
=
PEDSELF
->
GetPosition
(
)
->
fY
;
coords
[
2
]
=
PEDSELF
->
GetPosition
(
)
->
fZ
;

ImPasha
04.05.2019, 22:44
пиздец, если ты не умеешь гуглить и вообще подключать lib и include лучше не лезь сюда. то, что я тебе скинул, написал Крайслер, добрый и опытный программист, объяснил он в теме всё на языке мартышек, которые скачали проект и не понимают куда тыкать


Да его просто застыдили, что он инсталляторы через SIM собирает, а теперь он пытается написать инсталлятор на ImGUI. Это болезнь.

sdfaw
05.05.2019, 14:02
как получить координаты костей игроков?

ШPEK
05.05.2019, 14:08
как получить координаты костей игроков?


В файле CPed.h есть функция и константы

sdfaw
05.05.2019, 14:15
В файле CPed.h есть функция и константы


я так понял это?

enum eBone {

BONE_PELVIS1 = 1,

BONE_PELVIS,

BONE_SPINE1,

BONE_UPPERTORSO,

BONE_NECK,

BONE_HEAD2,

BONE_HEAD1,

BONE_HEAD,

BONE_RIGHTUPPERTORSO = 21,

BONE_RIGHTSHOULDER,

BONE_RIGHTELBOW,

BONE_RIGHTWRIST,

BONE_RIGHTHAND,

BONE_RIGHTTHUMB,

BONE_LEFTUPPERTORSO = 31,

BONE_LEFTSHOULDER,

BONE_LEFTELBOW,

BONE_LEFTWRIST,

BONE_LEFTHAND,

BONE_LEFTTHUMB,

BONE_LEFTHIP = 41,

BONE_LEFTKNEE,

BONE_LEFTANKLE,

BONE_LEFTFOOT,

BONE_RIGHTHIP = 51,

BONE_RIGHTKNEE,

BONE_RIGHTANKLE,

BONE_RIGHTFOOT

};

можно пример использования плиз?

checkdasound
05.05.2019, 14:36
я так понял это?
enum eBone {
BONE_PELVIS1 = 1,
BONE_PELVIS,
BONE_SPINE1,
BONE_UPPERTORSO,
BONE_NECK,
BONE_HEAD2,
BONE_HEAD1,
BONE_HEAD,
BONE_RIGHTUPPERTORSO = 21,
BONE_RIGHTSHOULDER,
BONE_RIGHTELBOW,
BONE_RIGHTWRIST,
BONE_RIGHTHAND,
BONE_RIGHTTHUMB,
BONE_LEFTUPPERTORSO = 31,
BONE_LEFTSHOULDER,
BONE_LEFTELBOW,
BONE_LEFTWRIST,
BONE_LEFTHAND,
BONE_LEFTTHUMB,
BONE_LEFTHIP = 41,
BONE_LEFTKNEE,
BONE_LEFTANKLE,
BONE_LEFTFOOT,
BONE_RIGHTHIP = 51,
BONE_RIGHTKNEE,
BONE_RIGHTANKLE,
BONE_RIGHTFOOT
};
можно пример использования плиз?


заносишь координаты в вектор и потом уже достаешь координаты x, y, z. Вроде так.

C++:






CVector
*
position
;
PEDSELF
->
GetBonePosition
(
BONE_HEAD
,
position
)
posX
=
position
[
0
]
;
posY
=
position
[
1
]
;
posZ
=
position
[
2
]
;

sdfaw
05.05.2019, 14:54
заносишь координаты в вектор и потом уже достаешь координаты x, y, z. Вроде так.

C++:






CVector
*
position
;
PEDSELF
->
GetBonePosition
(
BONE_HEAD
,
position
)
posX
=
position
[
0
]
;
posY
=
position
[
1
]
;
posZ
=
position
[
2
]
;





не подскажешь как изменить цвет костей?

Sarutobi1
05.05.2019, 15:03
не подскажешь как изменить цвет костей?


Каво?

sdfaw
05.05.2019, 15:05
Каво?


костей

Cake_
05.05.2019, 15:15
не подскажешь как изменить цвет костей?


Во время рендера можешь задать цвет линиям.

C++:






SF
->
getRender
(
)
->
DrawLine
(
screen
[
0
]
,
screen
[
1
]
,
screen2
[
0
]
,
screen2
[
1
]
,
2
,
Color
)
;




Последний аргумент(параметр) -цвет.



не подскажешь как изменить цвет костей?


И перед этим придётся 3d коорды перевести в экранные







C++:






SF
->
getGame
(
)
->
convert3DCoordsToScreen
(
enpos
[
0
]
,
enpos
[
1
]
,
enpos
[
2
]
,
&
screen
[
0
]
,
&
screen
[
1
]
)
;




Дальше разберёшься

sdfaw
05.05.2019, 15:51
как преобразовать CVector в float?

ШPEK
05.05.2019, 15:55
как преобразовать CVector в float?


reinterpret_cast(object)

sdfaw
05.05.2019, 16:02
reinterpret_cast(object)


как использовать?

posX = reinterpret_cast(position[0]);

так?

sdfaw
05.05.2019, 16:24
Да


error C2440: reinterpret_cast: невозможно преобразовать "CVector" в "float"

sdfaw
05.05.2019, 16:31
Я же тебе кидал функцию для перевода в экранные координаты...


SF->getGame()->convert3DCoordsToScreen(posX, posY, posZ, &screen[0], &screen[1]);

вот

в начале функции

float posX;

float posY;

float posZ;

в функции

posX = reinterpret_cast(position[0]);

posY = reinterpret_cast(position[1]);

posZ = reinterpret_cast(position[2]);

sdfaw
05.05.2019, 16:40
&screen[0], &screen[1] - это и есть уже экранные координаты. Что ты хочешь сделать?


SF->getRender()->DrawLine(screen[0], screen[1], 2, 0xFF00FF00);

я пытаюсь кости подсветить

sdfaw
05.05.2019, 16:46
Фулл скинь


в лс скинул

Imbecil
06.05.2019, 23:35
Можно ли как получить эти оба массива чисел? На стадии отрисовки или после.


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

Imbecil
07.05.2019, 18:07
Нужно читать текст в текстдраве я предполагаю


как?

Cake_
07.05.2019, 18:37
как?



C++:






SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
textdraw
[
ID texdraw
]
->
szText
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
textdraw
[
ID texdraw
]
->
szString




Легко

Imbecil
07.05.2019, 20:23
C++:






SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
textdraw
[
ID texdraw
]
->
szText
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
textdraw
[
ID texdraw
]
->
szString




Легко


спасибо. а еще можешь подсказать, пожалуйста, как получить список всех тектдравов и как узнать что мне нарисовало эту таблицу, как это хукать?

#Rin
07.05.2019, 20:57
error C2440: reinterpret_cast: невозможно преобразовать "CVector" в "float"


В самом начале тебя ввели в заблуждение.

C++:






CVector pos
;
pos
.
fX
;
pos
.
fY
;
pos
.
fZ
;