ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   GTA SA, C++ | Как работает карта педов? (https://forum.antichat.xyz/showthread.php?t=1383277)

Receiver 31.03.2021 10:12

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

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

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

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

kin4stat 31.03.2021 13:59

C++:





Код:

struct
poolBitmap
{
unsigned
char
nId
:
7
;
bool
bEmpty
:
1
;
}
;



+0 это new CCopPed[n];

+4 это new poolBitmap[n];

+8 это n

+12 это номер самого последнего педа в пуле, т.е. может быть такая картина:

ped nullptr nullptr ped nullptr ped

По оффсету 12 будет лежать значение 6

UPD: возможно там будет не 6, а 1, как индекс первого свободного элемента куда можно воткнуть нового педа при создании, не помню точно

Receiver 31.03.2021 14:03

Цитата:

Сообщение от KiN4StAt

C++:





Код:

struct
poolBitmap
{
unsigned
char
nId
:
7
;
bool
bEmpty
:
1
;
}
;



+0 это new CCopPed[n];
+4 это new poolBitmap[n];
+8 это n
+12 это номер самого последнего педа в пуле, т.е. может быть такая картина:
ped nullptr nullptr ped nullptr ped
По оффсету 12 будет лежать значение 6
UPD: возможно там будет не 6, а 1, как индекс первого свободного элемента куда можно воткнуть нового педа при создании, не помню точно

Как этим пользоваться?

Musaigen 31.03.2021 14:16

Цитата:

Сообщение от RECEIVER

Как этим пользоваться?

plugin-sdk/plugin_sa/game_sa/CPool.h at master · DK22Pac/plugin-sdk

An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk

github.com

Receiver 31.03.2021 14:28

Цитата:

Сообщение от Musaigen

plugin-sdk/plugin_sa/game_sa/CPool.h at master · DK22Pac/plugin-sdk

An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk

github.com


Первым же делом пошел смотреть Plugin SDK, создал тему, потому что не понял как это вообще работает и как этим пользоваться. Тупое копирование меня не устраивает

Musaigen 31.03.2021 15:56

Цитата:

Сообщение от RECEIVER

Первым же делом пошел смотреть Plugin SDK, создал тему, потому что не понял как это вообще работает и как этим пользоваться. Тупое копирование меня не устраивает

Как-то так. (Я не эксперт в этом)

Простой пример:





[CODE]
#include
#include
using
std
::
cout
;
using
std
::
endl
;
union
CColor
{
unsigned
long
color
;
struct
{
// Сколько может уместиться байтов в unsigned long -> 4
unsigned
char
alpha
;
unsigned
char
red
;
unsigned
char
green
;
unsigned
char
blue
;
}
;
CColor
(
)
{
this
->
alpha
=
255
;
this
->
red
=
255
;
this
->
green
=
255
;
this
->
blue
=
255
;
cout

alpha

red

green

blue

color



Сложный пример:





[CODE]
#include
#include
using
std
::
cout
;
using
std
::
endl
;
union
tPoolObjectFlags
{
struct
{
// Сколько байтов может поместиться в unsigned char -> 1
// Здесь утверждать ничего не стану, ибо сам хз
unsigned
char
nId
:
7
;
bool
bEmpty
:
1
;
// Возможно, имеется виду размер типа поля поделить на кол-во битов. Т.е:
// sizeof(unsigned char) / 7 -> 255 / 7
// sizeof(bool) / 1 -> 1 / 1
}
;
unsigned
char
value
;
tPoolObjectFlags
(
)
{
unsigned
char
byteId
=
2
;
bool
bEmpty
=
true
;
this
->
value
=
value
|
(
byteId
)
;
this
->
value
=
value
|
(
bEmpty

nId

bEmpty

value

value
=
0
;
this
->
nId
=
2
;
this
->
bEmpty
=
true
;
cout

nId

bEmpty

value


kin4stat 31.03.2021 16:02

[QUOTE="Musaigen"]

this->value = value | (byteId); this->value = value | (bEmpty

C++:





Код:

this
->
bEmpty
=
bEmpty
;
this
->
nId
=
byteId
;


Receiver 31.03.2021 17:23

Цитата:

Сообщение от Musaigen

struct { // Сколько байтов может поместиться в unsigned char -> 1 // Здесь утверждать ничего не стану, ибо сам хз unsigned char nId : 7; bool bEmpty : 1; // Возможно, имеется виду размер типа поля поделить на кол-во битов. Т.е: // sizeof(unsigned char) / 7 -> 255 / 7 // sizeof(bool) / 1 -> 1 / 1 }; unsigned char value;

Я тут вроде разобрался немного. nValue это unsigned char, его размер 1 байт, т.е. 8 бит. Первые 7 бит nValue будет занимать nId, последний - bEmpty.


Время: 17:06