Просмотр полной версии : С/С++ Вопрос - Ответ
Неадекватная сова
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);
Функция бесконечно вызывается 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
(
)
;
}
Как то так вроде. Не проверял
Функция бесконечно вызывается 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, и что он делает?
Подскажите, для чего нужен #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)
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?
#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
@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
как будто это Present а не деструктор
это действительно так, если не продолжить выполнение оригинального кода после хука (деструктор будет вызваться до тех пор, пока значение глобального объекта CNetGame не станет равно нулю)
Шрифты подгружаются в скомпилированный плагин? Если у человека отсутствует шрифт в директории Win, ему не придется дополнительно скачивать его?
Шрифты подгружаются в скомпилированный плагин? Если у человека отсутствует шрифт в директории Win, ему не придется дополнительно скачивать его?
Смотря как сделаешь, можно как и с директории windows грузить, так и в сам плагин запихать шрифт.
Есть вариации работы с JSON? Создание, запись, чтение. Иль же на худой конец INI. Находил на форуме FileMan от SR_Team, но ссылка устарела, больше ничего не накопал.
Есть вариации работы с 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)
Есть вариации работы с 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() ?
Если нужна библиотека с фишками 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
(
)
;
(char*)&obj, sizeof(obj)
Ты почитал хоть документацию? Этот объект json, а не строка. Используй obj.dump().
Насчет работы с файлами: http://cppstudio.com/post/446/ (https://www.blast.hk/redirect/aHR0cDovL2NwcHN0dWRpby5jb20vcG9zdC80NDYv)
Ты почитал хоть документацию? Этот объект 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 по чтению данных, в этой - нет.
Сейчас вчитался в документации и статью на хабре, но не отыскал чтение содержимого. Отыскал следующее, но как я понял с помощью этого нельзя работать с самим содержимым JSON'а
C++:
std
::
vector
v
=
{
't'
,
'r'
,
'u'
,
'e'
}
;
json j
=
json
::
parse
(
v
)
;
Находил гайды по JSONcpp и RapidJSON по чтению данных, в этой - нет.
C++:
json
::
parse
(
)
;
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());
???
а как из строки в объект. я чет туплю
Короч такой проблемс. использую 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)
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)
Лучше забей и юзай ini:
brofield/simpleini(https://github.com/brofield/simpleini) (https://github.com/brofield/simpleini)
Причем тут ини? json мне нужен для чтения ответа с сервера :/
NarutoUA
18.01.2019, 19:23
Причем тут ини? json мне нужен для чтения ответа с сервера :/
Да я вообще не тебе, а челу который в среду писал
Да я вообще не тебе, а челу который в среду писал
Уже понял, что для постоянной перезаписи JSON не вкатит. Помимо INI на слуху стояли Toml, Tree. Чем-то из этого пользовался, посоветуешь?
F11GAR0.
19.01.2019, 18:57
0393: actor $PLAYER_ACTOR perform_animation "Gun_2_IDLE" at 4@ times_normal_rate
адрес ***ни плиз
Подскажите как понять, что установлен SAMP ADDON
Подскажите как понять, что установлен 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:
Появилась необходимость реализовать на С++ консольном приложении систему горячих клавиш. Если принимать сообщения через WndProc о нажатиях, всё работает нормально, но до тех пор, пока я не сверну/уберу фокус с моего приложения.
Вопрос: как можно сделать так, чтобы моё приложения после скрытия продолжало принимать события нажатия клавиши/мыши, как это сделано в AHK?
Крашит скрипт из первого урока по sampfuncs, из-за чего это может быть?
Показать код, например.
Как можно расположит текст по центру форми в ImGui?
Код:
#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 строку удали.
14 строку удали.
Я криворукий шушуть, поэтому буду признателен за объяснение этой херни:
Imgur(https://imgur.com/a/nxPA8KT) (https://imgur.com/a/nxPA8KT)
Я криворукий шушуть, поэтому буду признателен за объяснение этой херни:
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 установлен.
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".
Вот шо за пиздец? Тупо голый проект запустить не могу.
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".
ну бля, если не можешь понять, поч не зайти в переводчик? или чё, религия не позволяет?
Кто может дать функцию фейк афк?
Azller Lollison
10.02.2019, 01:15
Кто может дать функцию фейк афк?
хукаешь онфут\инкар\пассенжер\спек и нопаешь.
Как через ID_VEHICLE_SYNC, прочитать скорость машины?
При попытке словить скорость так: g_Players->pRemotePlayer[pId]->pPlayerData->fVehicleMoveSpeed - получается всё нормально.
Через ID_VEHICLE_SYNC, как не пытался получить fMoveSpeed, не получалось
Как проверить, что сообщение пришло от именно от сервера а не от игрока?
Как пофиксить краш при /q в имгуи?
Как пофиксить краш при /q в имгуи?
Версию SDK с версией SF сверь.
В точности не знаю, произошли ли изменения в SDK с обновлением до 5.4, но заметил, что плагин на SDK 5.4 при /q на SF 5.3 крашит, а на 5.4 - нет.
Несколько вопросов...
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 раз?
дай ссылку на 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() не?
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
)
Ну это не настоящий рандом(будут одни и теже значения) нужно еще инициализировать такое
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)
Версию SDK с версией SF сверь.
В точности не знаю, произошли ли изменения в SDK с обновлением до 5.4, но заметил, что плагин на SDK 5.4 при /q на SF 5.3 крашит, а на 5.4 - нет.
Это потому что Фип в 5.4 пофиксил проблему с затиранием деструктора другими плагинами.
Достаточно использовать нативный DLL_PROCESS_DETACH деструктор в дллмаине.
Как получить название машины в которой сидишь?
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
]
)
;
http://prntscr.com/mncs51 (https://www.blast.hk/redirect/aHR0cDovL3BybnRzY3IuY29tL21uY3M1MQ)
WORD modelid = SF->getSAMP()->getVehicles()->pSAMP_Vehicle[carid]->pGTA_Vehicle->base.model_alt_id;
как отправить сообщение на сервер?
jenekbueno
21.02.2019, 19:12
как отправить сообщение на сервер?
в какой среде
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 Народ я разобрался так что листайте дальше!!!!
Вопрос века: как проверить что 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
}
Это будет работать во всем стриме или только на видимой дистанции?
во всём стриме
Это будет работать во всем стриме или только на видимой дистанции?
стрим
как использовать задержку в CALLBACK'ах ?
как использовать задержку в CALLBACK'ах ?
Код:
[CODE]
static unsigned long long timer = GetTickCount()
if (timer + 1000
sense.eXe
24.02.2019, 16:47
Как получить цвет клиста? sf api
Как получить цвет клиста? sf api
SF->getSAMP()->getPlayers()->GetPlayerColor();
Не работает
у меня работает
Не работает
дай скрин текста который тебе надо?
как установить всё нужное чтобы писать sf плагины, читал темы разные, нихуя не понятно (я ньюфаг в с++). Вроде всё установил что надо, но что делать дальше хз.
jenekbueno
03.03.2019, 12:39
в луа есть такая шляпа как onPlayerDeathNotification.
помогите на плюсах такое сделать, либо, хотя бы адрес функции выполняющее добавление игрока в килл лист, в самп.длл помогите найти.
хотя бы адрес функции выполняющее добавление игрока в килл лист, в самп.длл помогите найти
Для 0.3.7 R1: 0x66A10
Подскажите,пожалуйста, адрес функи, которая ставит стрелку над педом
http://pro-gang.ucoz.ru/_ld/14/41034485.jpg
Есть ли возможность менять шрифт текста для 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
Есть у кого нибудь адреса для получения координат камеры?
Есть у кого нибудь адреса для получения координат камеры?
x 0xB6F9CC
y 0xB6F9D0
z 0xB6F9D4
Подскажите пожалуйста, каким образом я могу передать метод класса в функцию registerChatCommand.
Подскажите пожалуйста, каким образом я могу передать метод класса в функцию registerChatCommand.
перед методом пиши static, просто нужна статическая функция
перед методом пиши static, просто нужна статическая функция
Благодарствую. Сейчас проверю.
UPD:
https://forum.antichat.xyz/attachments/27314585/
PS:
https://forum.antichat.xyz/attachments/27314585/
Благодарствую. Сейчас проверю.
UPD:
PS:
И еще после void допиши CALLBACK
И еще после void допиши CALLBACK
Ты PS смотрел?
И еще после void допиши CALLBACK
Lua:
static void CALLBACK
run
(
std
::
string prms
/
*
текст после команды
*
/
)
{
}
static void CALLBACK run(std::string prms/*текст после команды*/){
}
Ой, совсем забыл. Спасибо.
UPD:
https://forum.antichat.xyz/attachments/27314593/
UPD: Проблема была в другом
Почему вылетает 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
(
""
)
;
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
(
""
)
;
Если это в маинлуп то ты создаёшь очень много потоков и из-за етого вылет нужны проверки
Если это в маинлуп то ты создаёшь очень много потоков и из-за етого вылет нужны проверки
Не совсем понял, можно подробней?
Не совсем понял, можно подробней?
Условие нужно
Условие нужно
Если это в маинлуп то ты создаёшь очень много потоков и из-за етого вылет нужны проверки
Я кажется вас понял.
У меня поток создаётся 1 раз (не бесконечно, только при инициализации).
Не совсем понял, можно подробней?
Екземпляр класса должен быть глобальным или static
Екземпляр класса должен быть глобальным или static
Попытался сделать глобальным и статическим - результата нет, всё также вылетает.
Хочу обратить внимание на то, что если я укажу th.join() после: std::thread th = test.start(""), то игра не вылетит, но к сожалению от потока не будет смысла (т.к. фризит процесс при Sleep).
UPD: Проверил на консольном приложении - успешно (но не в SF).
https://i.imgur.com/iSd77Pd.png
Попытался сделать глобальным и статическим - результата нет, всё также вылетает.
Хочу обратить внимание на то, что если я укажу th.join() после: std::thread th = test.start(""), то игра не вылетит, но к сожалению от потока не будет смысла (т.к. фризит процесс при Sleep).
UPD: Проверил на консольном приложении - успешно (но не в SF).
https://i.imgur.com/iSd77Pd.png
Необходимость в парилке с потоком возникла с целью нормально использовать задержку?
Необходимость в парилке с потоком возникла с целью нормально использовать задержку?
Да, но не только из-за задержки.
Да, но не только из-за задержки.
Если это вдруг поможет, предлагаю простой вариант избавления от этой парилки, с библиотекой thread.
C++:
[CODE]
const
auto
myTask
=
[
]
(
)
{
// Твой код.
// Можно использовать Sleep и это не будет тормозить игру.
}
;
std
::
thread
(
myTask
)
.
detach
(
)
;
//
[QUOTE="Harryss"]
Если это вдруг поможет, предлагаю простой вариант избавления от этой парилки, с библиотекой thread.
C++:
[CODE]
const
auto
myTask
=
[
]
(
)
{
// Твой код.
// Можно использовать Sleep и это не будет тормозить игру.
}
;
std
::
thread
(
myTask
)
.
detach
(
)
;
//
Есть ли возможность менять шрифт текста для 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
(
)
;
у меня так
Возможно ли в registerChatCommandпередать в качестве второго параметра лямбду? Но внутри неё мне нужно получить 2 переменные, которые в ней не находятся. Если да, то пожалуйста покажите пример.
Возможно ли в 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
(
)
;
}
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
(
)
;
}
У меня нет определённой команды.
Я команды создаю уже непосредственно в самой игре и не могу сделать так как у тебя.
Не подскажете, какой тип имеет выражение?)
Код:
[](){};
Не подскажете, какой тип имеет выражение?)
Код:
[](){};
Стандартом не определена однозначность.
Так называемый 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 страница
дарова, вобщем хочу начать писать sf плагины, можете объяснить в кратце что по чём.
например как пользоваться
SF->тут что-то()->тут что-то()->тут что-то();
или что такое вот это
pPlayer->szPlayerName,
pPlayer->iPing,
pPlayer->iScore,
pPlayer->iIsNPC,
pPlayer->pPlayerData->iAFKState == 2);
где можно найти информацию про это?
где можно найти функции sf api?
Структуры это. Заходишь в папку SFAPI, там заголовочные файлы (.h), в этих файлах будут эти структуры.
а где можно почитать про sf api?
p.s видел уроки usShadow, но мало что понял
как применить стиль в имгуи?
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
)
;
как то так:
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
Посоветуйте простенькую не тяжеловесную 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
Как занопать определенные фрагменты памяти? Пример, я знаю что врайтпроцессмемори, но как занопать несколько сразу
Как воспроизвести аудио файл вSAMPFUNCS? Можно пример?
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': Не найдена указанная процедура.
Возможно это поможет вам понять, что я сделал не так. Помогите пожалуйста записать СИшный код правильно, я конечно спросил в разделе луа, но все таки то раздел луа, а тут проблема в коде написанном на СИ, потому шансов получить помощь у меня больше здесь, я полагаю.
Прошу отнестись ко мне снисходительно, я никогда не изучал СИ и дай Бог если это мой единственный раз, когда я столкнусь с этим языком. Рассчитываю на вашу поддержку.
Как сделать так, чтобы по определенной команде в чат писало '/me ' и строку из test.ini файла
-raymond-
06.04.2019, 22:51
как перевести цвет uint32_t в формат rbga и как в hex
Рассчитываю на вашу поддержку.
Вы попались на то, что многие функции 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 это разные вещи, к сожалению. Но думаю с этим я уже смогу разобраться. Спасибо!
Как получить координаты пикапе в зоне стрима?
кто то сталкивался с такой проблемой? крч установил 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
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
кто то сталкивался с такой проблемой? крч установил 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/
В начало
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 файла в котором читаешь
Покажи содержимое ini файла в котором читаешь
https://forum.antichat.xyz/attachments/27323470/
а, файл надо было кидать директорию с сампом, а не в sampfuncs...
а, файл надо было кидать директорию с сампом, а не в sampfuncs...
std::string str = INI::ReadString("time", "string", 1337, "SAMPFUNCS\\time.INI");
а можно как то не добавлять сообщение в чат если в нем есть определенная строка. например, чтобы не отображались сообщения от определенных игроков
можно пример работы с 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/
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)
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)). Я почему-то так и подумал. Спасибо.
Как реализовать собственную функцию DecodeString из SF API?
C++:
void
SFRakNet
::
DecodeString
(
char
*
output
,
int
maxCharsToWrite
,
BitStream
*
input
)
;
loganhackerdff
10.04.2019, 00:15
при огткрытии файла .cpp через visual studio 2017 вместо нормальной отладки, кнопка "присоединение" , до переустановки винды было всё нормально
Как реализовать собственную функцию 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, то в целом всё нормально. Как тут быть?
У меня вопрос насчёт выгрузки имгуи. Я посмотрел, в этой (https://blast.hk/threads/23083/) теме имгуи выгружается в GameDestructorCallback. Но там же пишется, что деструктор не вызывается при выходе из игры, и советуется выгружать его в DLL_PROCESS_DETACH. Собственно, в чём вопрос: нужно ли использовать оба способа одновременно? У меня в таком случае при выходе идёт краш игры. Если же оставить один DLL_PROCESS_DETACH, то в целом всё нормально. Как тут быть?
Сделать мьютекс с проверкой, если уже вызван деструктор, то ничего не делать.
Нажимаю ctrl + f5 (чтобы скомпилировать), вылазит (см.скрин). Не особо разобрался.
Нажимаю ctrl + f5 (чтобы скомпилировать), вылазит (см.скрин). Не особо разобрался.
дак с SF API работают на Visual Studio, на IDE, а у тебя, судя по скриншоту, VS Code.
Подскажите пожалуйста, каким образом я могу передать метод класса в функцию 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
Всем здравствуйте. Надеюсь, эксперты помогут мне в решении проблемы. Суть в том, что хочу как-то использовать встоенные в GTA SA функции (пример: написать белый текст снизу экрана) своей программой. У DarkP1xel`я заметил следующее:
((void(__cdecl *)(PCHAR, UINT, USHORT, bool))0x69F1E0)
Но это для DLL библиотеки, я же хочу для стандартного "консольного приложения".
Как сделать рандомный слип например от 50 до 100 мс?
_=Gigant=_
14.04.2019, 19:15
Как сделать рандомный слип например от 50 до 100 мс?
use rand() % 100
Всем здравствуйте. Надеюсь, эксперты помогут мне в решении проблемы. Суть в том, что хочу как-то использовать встоенные в GTA SA функции (пример: написать белый текст снизу экрана) своей программой. У DarkP1xel`я заметил следующее:
Но это для DLL библиотеки, я же хочу для стандартного "консольного приложения".
Google: CreateRemoteThread
Как получить коорды объекта / модели? Попытался сам написать, что-то не то вообщем
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++:
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
)
;
}
}
Небольшая абстрактная задачка: имеется объект 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"}
Как из данной строки получить "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"'
)
DLL
Есть ли уроки по созданию меню (не imgui)?
_=Gigant=_
17.04.2019, 23:41
DLL
Есть ли уроки по созданию меню (не imgui)?
take a look in sobeit source or check unknown cheats -> directx forum
Небольшая абстрактная задачка
Мне кажется, немножко детали упущены по поводу того, как это все должно использоваться. Это к тому, что, возможно, задачу можно будет свести к использованию обвертки с помощью 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 была продемонстрирована утечка памяти
Мне кажется, немножко детали упущены по поводу того, как это все должно использоваться.
Есть массив (обертка не подойдет) объектов 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) ничего об этом не сказано. Также безрезультатно гуглил в других сточниках. Можно поинтересоваться, откуда информация?
Хотелось бы увидеть реализацию подобного на 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
Дайте функцию бега на сф, пожалуйста не кидайте соб
Либо я дико туплю, либо это отступы между строчками и отступы самих ников, а не расположение киллиста. Покопавшись, понял, что положение киллстата зависит от игрового разрешения. Тот плагин, который я кидал, как-то подменяет это самое разрешение, но при этом остальные части (худ, чат и т.д). никак не изменяет. При выгрузке плагина, киллстат встаёт на своё место. Интересная задумка, но не могу придумать, как можно заблокировать изменение остальных элементов, чтобы двигать только киллстат. Но спасибо за помощь.
не, ты какую то хрень написал.
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
Столкнулся с такой проблемой:
- В цикле стоит проверка на зажатую клавишу (VK_LMENU), если нажата - выводит сообщение. Если же я с рабочего стола перейду в игру (через Alt + Tab), то это сообщение будет выводиться до первого нажатия на клавишу Alt. Использовал функцию SF->getGame()->isKeyDown и ImGui::IsKeyDown - результат один.
P.S. Замечу, сама игра не обрабатывают эту клавишу (ну тип персонаж не ходит на альте), а данные функции обрабатывают.
Есть ли способ решить данную проблему?
Можно на c++ сделать биндер для рп?
Можно на c++ сделать биндер для рп?
Ну да
Ну да
Почему я ни разу не видел биндер на С++?
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
Как сделать биндер?
Вам не сюда
Как сделать биндер?
первый раз такого извращенца вижу. для биндеров луа и ахк, но не с++
Вам не сюда
первый раз такого извращенца вижу. для биндеров луа и ахк, но не с++
Что вы такие? Вдруг человеку нечего делать и он решил сделать ASI-биндер!
Что вы такие? Вдруг человеку нечего делать и он решил сделать ASI-биндер!
Не ну реально я ни разу не видел ASI биндер, почему такие никто не делает? СКажите?
Не ну реально я ни разу не видел ASI биндер, почему такие никто не делает? СКажите?
зачем?
Roger571
29.04.2019, 17:07
Не ну реально я ни разу не видел ASI биндер, почему такие никто не делает? СКажите?
Реализация на скриптовом языке гораздо проще, никакие преимущества компилируемого в данном случае не будут раскрыты.
Но опять же, если ты любишь извращаться - вперед, никто не вправе тебе это запретить
Receiver
01.05.2019, 19:06
Как получить текст с TextDraw?
Можно ли как получить эти оба массива чисел? На стадии отрисовки или после.
Как кликнуть на текстдрав?
randazzo
02.05.2019, 19:34
Как кликнуть на текстдрав?
C++:
SF
->
getSAMP
(
)
->
sendClickTextDraw
(
1
)
;
Без сф - заполнить rpc clicktextdraw (https://blast.hk/wiki/samp:rpc_clicktextdraw) и отправить
есть пример подключения imgui к d3d9 игре?
есть пример подключения 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 шрифт запихнуть
https://blast.hk/threads/24644/ где тут imgui шрифт запихнуть
В инициализацию окна
Receiver
03.05.2019, 14:57
как сделать проверку лицензии
как сделать проверку лицензии
Всмысле лицензии? Точнее выражайся
TheUnity
03.05.2019, 17:44
Всмысле лицензии? Точнее выражайся
ну типо он выдает ключ, а пользователь активирует плагин, я так понял
как сделать проверку лицензии
самый хуёвый вариант. обойдёт даже мамин хакер, но тебе будет норм думаю.
Код:
// если тебе для сампа, то засунь в 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
https://github.com/OneshotGH/DirectX9-ImGui-Implementation-Hook
Видео-объяснение:
Огромное тебе спасибо, единственный, кто смог помочь
https://forum.antichat.xyz/attachments/27333046/
Теперь созрел ещё вопрос. Как сделать открытие и закрытие по кнопке?
upd: всё, разобрался, сделал
Огромное тебе спасибо, единственный, кто смог помочь
Теперь созрел ещё вопрос. Как сделать открытие и закрытие по кнопке?
Варфейс не детектит DLL с рендером?
Варфейс не детектит 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/
ребята, как это сделать(по скрину поймёте идею)
в луа это бы сделалось так:
ImGui.Text("ur fov"..fov)
а как это сделать на плюсах?
https://forum.antichat.xyz/attachments/27333077/
ребята, как это сделать(по скрину поймёте идею)
в луа это бы сделалось так:
ImGui.Text("ur fov"..fov)
а как это сделать на плюсах?
?
Код:
ImGui::Text("ur fov: %i", fov);
%i
а можно фулл? ну то есть за что отвечает %i и другие?
rraggerr
04.05.2019, 15:06
а можно фулл? ну то есть за что отвечает %i и другие?
https://ru.wikipedia.org/wiki/Система_типов_Си (https://www.blast.hk/redirect/aHR0cHM6Ly9ydS53aWtpcGVkaWEub3JnL3dpa2kvJUQwJUExJU QwJUI4JUQxJTgxJUQxJTgyJUQwJUI1JUQwJUJDJUQwJUIwXyVE MSU4MiVEMCVCOCVEMCVCRiVEMCVCRSVEMCVCMl8lRDAlQTElRD AlQjg)
а можно фулл? ну то есть за что отвечает %i и другие?
гугли спецификаторы си
скачать проект с подключённым имгуи отсюда, решил скомпилировать но
https://i.imgur.com/3ncnxoj.png
https://i.imgur.com/038kCbG.png
https://i.imgur.com/qcboahs.png
скачать проект с подключённым имгуи отсюда, решил скомпилировать но
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++ версию самую новую в свойствах проекта
https://stackoverflow.com/questions/41631576/cannot-open-source-file-d3dx9-h (https://www.blast.hk/redirect/aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvND E2MzE1NzYvY2Fubm90LW9wZW4tc291cmNlLWZpbGUtZDNkeDkt aA)
И поставь vc++ версию самую новую в свойствах проекта
не помогает
не помогает
гугл в помощь -- https://yougame.biz/threads/29979/ (https://www.blast.hk/redirect/aHR0cHM6Ly95b3VnYW1lLmJpei90aHJlYWRzLzI5OTc5Lw)
ещё https://yougame.biz/threads/16445/ (https://www.blast.hk/redirect/aHR0cHM6Ly95b3VnYW1lLmJpei90aHJlYWRzLzE2NDQ1Lw)
гугл в помощь -- https://yougame.biz/threads/29979/ (https://www.blast.hk/redirect/aHR0cHM6Ly95b3VnYW1lLmJpei90aHJlYWRzLzI5OTc5Lw)
ещё https://yougame.biz/threads/16445/ (https://www.blast.hk/redirect/aHR0cHM6Ly95b3VnYW1lLmJpei90aHJlYWRzLzE2NDQ1Lw)
чё за ***ня
общий вопрос
какой версии vs вы используете
общий вопрос
какой версии vs вы используете
VS 2017
Можно ли как получить эти оба массива чисел? На стадии отрисовки или после.
https://blast.hk/attachments/29156/
checkdasound
04.05.2019, 19:42
общий вопрос
какой версии vs вы используете
2013
общий вопрос
какой версии vs вы используете
2019 pro
Receiver
04.05.2019, 21:09
как получить расстояние от нашего персонажа до другого игрока, типа проверку сделать
общий вопрос
какой версии vs вы используете
VS 2019 для евреев (Community)
чё за ***ня
Прекрасное чтиво, рекомендую прочитать. Говорят, помогает решить все проблемы.
чё за ***ня
пиздец, если ты не умеешь гуглить и вообще подключать lib и include лучше не лезь сюда. то, что я тебе скинул, написал Крайслер, добрый и опытный программист, объяснил он в теме всё на языке мартышек, которые скачали проект и не понимают куда тыкать
как получить расстояние от нашего персонажа до другого игрока, типа проверку сделать
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
;
пиздец, если ты не умеешь гуглить и вообще подключать lib и include лучше не лезь сюда. то, что я тебе скинул, написал Крайслер, добрый и опытный программист, объяснил он в теме всё на языке мартышек, которые скачали проект и не понимают куда тыкать
Да его просто застыдили, что он инсталляторы через SIM собирает, а теперь он пытается написать инсталлятор на ImGUI. Это болезнь.
как получить координаты костей игроков?
как получить координаты костей игроков?
В файле CPed.h есть функция и константы
В файле 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
]
;
заносишь координаты в вектор и потом уже достаешь координаты 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
не подскажешь как изменить цвет костей?
Каво?
не подскажешь как изменить цвет костей?
Во время рендера можешь задать цвет линиям.
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
]
)
;
Дальше разберёшься
как преобразовать CVector в float?
как преобразовать CVector в float?
reinterpret_cast(object)
reinterpret_cast(object)
как использовать?
posX = reinterpret_cast(position[0]);
так?
Да
error C2440: reinterpret_cast: невозможно преобразовать "CVector" в "float"
Я же тебе кидал функцию для перевода в экранные координаты...
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]);
&screen[0], &screen[1] - это и есть уже экранные координаты. Что ты хочешь сделать?
SF->getRender()->DrawLine(screen[0], screen[1], 2, 0xFF00FF00);
я пытаюсь кости подсветить
Можно ли как получить эти оба массива чисел? На стадии отрисовки или после.
ну помогите пажилому человеку, пожалуйста. или хотя бы в какую сторону смотреть.
Нужно читать текст в текстдраве я предполагаю
как?
как?
C++:
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
textdraw
[
ID texdraw
]
->
szText
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
textdraw
[
ID texdraw
]
->
szString
Легко
C++:
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
textdraw
[
ID texdraw
]
->
szText
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
textdraw
[
ID texdraw
]
->
szString
Легко
спасибо. а еще можешь подсказать, пожалуйста, как получить список всех тектдравов и как узнать что мне нарисовало эту таблицу, как это хукать?
error C2440: reinterpret_cast: невозможно преобразовать "CVector" в "float"
В самом начале тебя ввели в заблуждение.
C++:
CVector pos
;
pos
.
fX
;
pos
.
fY
;
pos
.
fZ
;
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot