PDA

Просмотр полной версии : GTA SA, C++ | Как работает карта педов?


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
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
Как этим пользоваться?



plugin-sdk/plugin_sa/game_sa/CPool.h at master · DK22Pac/plugin-sdk (https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CPool.h)

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
plugin-sdk/plugin_sa/game_sa/CPool.h at master · DK22Pac/plugin-sdk (https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CPool.h)

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
Первым же делом пошел смотреть 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
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.