HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 22.07.2022, 00:49
RedHolms
Постоянный
Регистрация: 04.06.2020
Сообщений: 620
С нами: 3127813

Репутация: 133


По умолчанию

Задача казалось бы простая, но в CNetGame.m_localinfo.m_nId хранится мусор) Так же пробовал samp'овской функцией искать ID по педу, возвращало тоже самое

И да, мне нужно без SF, чистый самп
 
Ответить с цитированием

  #2  
Старый 22.07.2022, 05:35
F0RQU1N and
Познавший АНТИЧАТ
Регистрация: 29.09.2018
Сообщений: 1,292
С нами: 4012500

Репутация: 138


По умолчанию

какой именно мусор? у меня нормальный ид возвращает.
 
Ответить с цитированием

  #3  
Старый 22.07.2022, 17:32
RedHolms
Постоянный
Регистрация: 04.06.2020
Сообщений: 620
С нами: 3127813

Репутация: 133


По умолчанию

Цитата:
Сообщение от F0RQU1N  

какой именно мусор? у меня нормальный ид возвращает.
Число 5057
 
Ответить с цитированием

  #4  
Старый 24.07.2022, 16:18
RedHolms
Постоянный
Регистрация: 04.06.2020
Сообщений: 620
С нами: 3127813

Репутация: 133


По умолчанию

up
 
Ответить с цитированием

  #5  
Старый 24.07.2022, 16:51
sizeoftrickster
Участник форума
Регистрация: 28.07.2021
Сообщений: 138
С нами: 2524529

Репутация: 163
По умолчанию

Цитата:
Сообщение от RedHolms  

up
Могу предложить вариант:

C++:





[CODE]
// Вначале получаем указатель на структуру SAMP или stSAMP, CNetGame, pSAMP, вообщем как удобнее
pSAMP
=
*
reinterpret_cast

(
samp
.
dll
+
0x21A0F8
)
;
// Потом из структуры сампа получаем указатель на структуру игровых пулов
ppPools
=
reinterpret_cast

(
(
size_t
)
pSAMP
+
0x3CD
)
;
// Потом из структуры игровых пулов в структуре самп получаем указатель на структуру игроков
ppPlayer
=
reinterpret_cast

(
(
size_t
)
pPools
+
0x18
)
;
// В итоге, из структуры игроков получаем ник и ид ЛОКАЛЬНОГО игрока. Смотри: https://gitlab.com/prime-hack/samp/plugins/templates/samp/-/blob/master/SAMP by SR_team
pLocalPlayerNickname
=
reinterpret_cast

(
(
size_t
)
pPlayerPool
+
0xA
)
;
pLocalPlayerId
=
reinterpret_cast

(
(
size_t
)
pPlayerPool
+
0x4
)
;
short
SAMP
::
PlayerPool
::
GetLocalPlayerId
(
)
{
if
(
pLocalPlayerId
)
return
*
pLocalPlayerId
;
return
-
1
;
}
std
::
string SAMP
::
PlayerPool
::
GetLocalPlayerNickname
(
)
{
struct
msvc_string
{
union
{
char
szString
[
0x10
]
;
char
*
pszString
;
}
;
std
::
size_t length
;
std
::
size_t allocated
;
}
;
auto
string
=
*
reinterpret_cast

(
pLocalPlayerNickname
)
;
if
(
string
.
allocated



Еще один вариант, через pack и pop

C++:





Код:
#pragma pack(push, 1)
// Сюда структуры, сами структуры можно посмотреть: https://github.com/BlastHackNet/mod_s0beit_sa-1/blob/master/src/samp.h
struct
stSAMP
{
void
*
pUnk0
;
struct
stServerInfo
*
pServerInfo
;
uint8_t
byteSpace
[
24
]
;
char
szIP
[
257
]
;
char
szHostname
[
259
]
;
bool
bNametagStatus
;
// changes by /nametagstatus
uint32_t
ulPort
;
uint32_t
ulMapIcons
[
100
]
;
int
iLanMode
;
int
iGameState
;
uint32_t
ulConnectTick
;
struct
stServerPresets
*
pSettings
;
void
*
pRakClientInterface
;
struct
stSAMPPools
*
pPools
;
}
;
#pragma pack(pop)
 
Ответить с цитированием

  #6  
Старый 24.07.2022, 17:01
RedHolms
Постоянный
Регистрация: 04.06.2020
Сообщений: 620
С нами: 3127813

Репутация: 133


По умолчанию

г

[QUOTE="tr1ckster"]

Могу предложить вариант:

C++:





[CODE]
// Вначале получаем указатель на структуру SAMP или stSAMP, CNetGame, pSAMP, вообщем как удобнее
pSAMP
=
*
reinterpret_cast

(
samp
.
dll
+
0x21A0F8
)
;
// Потом из структуры сампа получаем указатель на структуру игровых пулов
ppPools
=
reinterpret_cast

(
(
size_t
)
pSAMP
+
0x3CD
)
;
// Потом из структуры игровых пулов в структуре самп получаем указатель на структуру игроков
ppPlayer
=
reinterpret_cast

(
(
size_t
)
pPools
+
0x18
)
;
// В итоге, из структуры игроков получаем ник и ид ЛОКАЛЬНОГО игрока. Смотри: https://gitlab.com/prime-hack/samp/plugins/templates/samp/-/blob/master/SAMP by SR_team
pLocalPlayerNickname
=
reinterpret_cast

(
(
size_t
)
pPlayerPool
+
0xA
)
;
pLocalPlayerId
=
reinterpret_cast

(
(
size_t
)
pPlayerPool
+
0x4
)
;
short
SAMP
::
PlayerPool
::
GetLocalPlayerId
(
)
{
if
(
pLocalPlayerId
)
return
*
pLocalPlayerId
;
return
-
1
;
}
std
::
string SAMP
::
PlayerPool
::
GetLocalPlayerNickname
(
)
{
struct
msvc_string
{
union
{
char
szString
[
0x10
]
;
char
*
pszString
;
}
;
std
::
size_t length
;
std
::
size_t allocated
;
}
;
auto
string
=
*
reinterpret_cast

(
pLocalPlayerNickname
)
;
if
(
string
.
allocated
 
Ответить с цитированием

  #7  
Старый 26.07.2022, 17:42
RedHolms
Постоянный
Регистрация: 04.06.2020
Сообщений: 620
С нами: 3127813

Репутация: 133


По умолчанию

up

Решение

я тупич масштаба миллиард, брал адрес, прибавлял оффсет и брал полученный адрес как ID (надо было кастить к поинтеру и брать значения с поинтера)

в коде нагляднее:

C++:





Код:
short
id
=
idk
+
0x1
;
// как я брал
short
id
=
*
(
short
*
)
(
idk
+
0x1
)
;
// как надо


догадался спустя 3 дня, класс)
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.