Просмотр полной версии : 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.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot