 |
|

14.04.2019, 20:17
|
|
Флудер
Регистрация: 26.10.2013
Сообщений: 4,924
С нами:
6603505
Репутация:
183
|
|
Сообщение от Vintik
Всем здравствуйте. Надеюсь, эксперты помогут мне в решении проблемы. Суть в том, что хочу как-то использовать встоенные в GTA SA функции (пример: написать белый текст снизу экрана) своей программой. У DarkP1xel`я заметил следующее:
Но это для DLL библиотеки, я же хочу для стандартного "консольного приложения".
Google: CreateRemoteThread
|
|
|

14.04.2019, 20:47
|
|
Участник форума
Регистрация: 04.04.2017
Сообщений: 263
С нами:
4793630
Репутация:
133
|
|
Как получить коорды объекта / модели? Попытался сам написать, что-то не то вообщем
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
]
;
|
|
|

15.04.2019, 00:11
|
|
Участник форума
Регистрация: 14.01.2018
Сообщений: 192
С нами:
4384333
Репутация:
113
|
|
Сообщение от cakebou
Как получить коорды объекта / модели? Попытался сам написать, что-то не то вообщем
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
)
;
}
}
|
|
|

15.04.2019, 13:44
|
|
Новичок
Регистрация: 18.10.2015
Сообщений: 6
С нами:
5563739
Репутация:
0
|
|
Небольшая абстрактная задачка: имеется объект 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
)
;
и в дальнейшем получить неопределенное поведение. Хотелось бы видеть подобные ошибки на этапе компиляции.
|
|
|

16.04.2019, 18:04
|
|
Постоянный
Регистрация: 06.03.2018
Сообщений: 464
С нами:
4310969
Репутация:
83
|
|
Как из данной строки получить "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"}
|
|
|

16.04.2019, 18:10
|
|
Флудер
Регистрация: 03.08.2016
Сообщений: 2,363
С нами:
5145387
Репутация:
183
|
|
Сообщение от babulya
Как из данной строки получить "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
|
|
|

16.04.2019, 18:45
|
|
Постоянный
Регистрация: 06.03.2018
Сообщений: 464
С нами:
4310969
Репутация:
83
|
|
через регулярки можно же вроде без json. На LUA делал - работало.
Lua:
Код:
ip
=
text
:
match
(
'"query":"(.*)","region"'
)
|
|
|

17.04.2019, 20:01
|
|
Постоянный
Регистрация: 02.11.2018
Сообщений: 375
С нами:
3963063
Репутация:
18
|
|
DLL
Есть ли уроки по созданию меню (не imgui)?
|
|
|

17.04.2019, 23:41
|
|
Участник форума
Регистрация: 19.01.2017
Сообщений: 130
С нами:
4901705
Репутация:
98
|
|
Сообщение от Natami
DLL
Есть ли уроки по созданию меню (не imgui)?
take a look in sobeit source or check unknown cheats -> directx forum
|
|
|

18.04.2019, 03:18
|
|
Постоянный
Регистрация: 15.12.2013
Сообщений: 412
С нами:
6530249
Репутация:
133
|
|
Сообщение от index
Небольшая абстрактная задачка
Мне кажется, немножко детали упущены по поводу того, как это все должно использоваться. Это к тому, что, возможно, задачу можно будет свести к использованию обвертки с помощью 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 была продемонстрирована утечка памяти
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|