Другое С/С++ Вопрос - Ответ

checkdasound

Известный
Проверенный
963
410
Как получить свой CPed?
При вызове так pGameInterface->GetPools()->GetPed((DWORD*)pPlayers->pLocalPlayer->pSAMP_Actor->pGTA_Ped); происходит краш.
При вызове так pGameInterface->GetPools()->GetPedFromRef(pGameInterface->GetPools()->GetPedRef((DWORD*)pPlayers->pLocalPlayer->pSAMP_Actor->pGTA_Ped)) также краш.
pGTA_Ped валидный
Если в sf api, то PEDSELF, если нет, то по адресу 0xB6F5F0.
 

atizoff

приобретаю кашель за деньги
Проверенный
1,296
1,179
здрсте всем привет всем! у меня тут встал вопросик, как сделать окно подтверждения на имгуи?
пример: нажимаю на буттон "здарова" и выходит имгуи окошечко и там текст "вы уверены?" и 2 кнопки "да" и "нет"
 

Stiopko

Известный
Проверенный
307
218
здрсте всем привет всем! у меня тут встал вопросик, как сделать окно подтверждения на имгуи?
пример: нажимаю на буттон "здарова" и выходит имгуи окошечко и там текст "вы уверены?" и 2 кнопки "да" и "нет"
C++:
if (ImGui::Button("Modal"))
            ImGui::OpenPopup("Modal window");

        if (ImGui::BeginPopupModal("Modal window"))
        {
            ImGui::Text("Hello dsjfhds fhjs hfj dshfj hds");
            if (ImGui::Button("Close"))
                ImGui::CloseCurrentPopup();
            ImGui::EndPopup();
        }
 
  • Нравится
Реакции: atizoff

index

Известный
126
82
Хз у него такой же вопрос
Я видел :) Но, всё-таки, 3 года прошло.

===

Подскажите, за что отвечает функция samp.dll+0x30B30 (0.3.7r1)?
У меня с ней проблема. Судя по сигнатуре (могу ошибаться) - это bool __thiscall RakClient::RPC(void *this, int* uniqueID, BitStream *bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, bool shiftTimestamp );, IDA дает такой листинг псевдокода:
C++:
char __thiscall sub_10030B30(char *this, int a2, int a3, int a4, int a5, int a6, int a7)
{
  int v7; // eax
  char result; // al

  v7 = *(_DWORD *)(this - 0xAAA);
  if ( v7 )
    result = sub_10036C30(
               a2,
               a3,
               a4,
               a5,
               a6,
               *(_DWORD *)(v7 + 1),
               *(_WORD *)(v7 + 5),
               0,
               a7,
               dword_100EC770,
               dword_100EC774,
               0);
  else
    result = 0;
  return result;
}
Тоже самое в asm:
.text:10030B30 sub_10030B30    proc near               ; DATA XREF: .rdata:100D534C↓o
.text:10030B30
.text:10030B30 arg_0           = dword ptr  4
.text:10030B30 arg_4           = dword ptr  8
.text:10030B30 arg_8           = dword ptr  0Ch
.text:10030B30 arg_C           = dword ptr  10h
.text:10030B30 arg_10          = dword ptr  14h
.text:10030B30 arg_14          = dword ptr  18h
.text:10030B30
.text:10030B30                 mov     eax, [ecx-0AAAh]
.text:10030B36                 test    eax, eax
.text:10030B38                 push    esi
.text:10030B39                 jnz     short loc_10030B41
.text:10030B3B                 xor     al, al
.text:10030B3D                 pop     esi
.text:10030B3E                 retn    18h
.text:10030B41 ; ---------------------------------------------------------------------------
.text:10030B41
.text:10030B41 loc_10030B41:                           ; CODE XREF: sub_10030B30+9↑j
.text:10030B41                 mov     edx, dword_100EC774
.text:10030B47                 push    0
.text:10030B49                 push    edx
.text:10030B4A                 mov     edx, dword_100EC770
.text:10030B50                 push    edx
.text:10030B51                 mov     edx, [esp+10h+arg_14]
.text:10030B55                 push    edx
.text:10030B56                 push    0
.text:10030B58                 sub     esp, 8
.text:10030B5B                 inc     eax
.text:10030B5C                 mov     esi, [eax]                         ; Ошибка доступа
.text:10030B5E                 mov     ax, [eax+4]
.text:10030B62                 mov     edx, esp
.text:10030B64                 mov     [edx], esi
.text:10030B66                 mov     [edx+4], ax
.text:10030B6A                 mov     edx, [esp+20h+arg_10]
.text:10030B6E                 mov     eax, [esp+20h+arg_C]
.text:10030B72                 push    edx
.text:10030B73                 mov     edx, [esp+24h+arg_8]
.text:10030B77                 push    eax
.text:10030B78                 mov     eax, [esp+28h+arg_4]
.text:10030B7C                 push    edx
.text:10030B7D                 mov     edx, [esp+2Ch+arg_0]
.text:10030B81                 push    eax
.text:10030B82                 push    edx
.text:10030B83                 add     ecx, 0FFFFF222h
.text:10030B89                 call    sub_10036C30
.text:10030B8E                 pop     esi
.text:10030B8F                 retn    18h
.text:10030B8F sub_10030B30    endp

При попытке использовать ее, передав в качестве this [ [ dwSAMP + SAMP_INFO_OFFSET ] + SAMP_RAKCLIENT_INTERFACE ] игру крашит. В 6 строчке переменной v7 присваевается значение по адресу this - 0xAAA (в каких вообще случаях бывает отрицательный сдвиг от this?), и в 14 строке получаю ошибку доступа. Может, функция не та?
 
Последнее редактирование:

barspinoff

Известный
126
33
Я видел :) Но, всё-таки, 3 года прошло.

===


У меня с ней проблема. Судя по сигнатуре (могу ошибаться) - это bool __thiscall RakClient::RPC(void *this, int* uniqueID, BitStream *bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, bool shiftTimestamp );, IDA дает такой листинг псевдокода:
C++:
char __thiscall sub_10030B30(char *this, int a2, int a3, int a4, int a5, int a6, int a7)
{
  int v7; // eax
  char result; // al

  v7 = *(_DWORD *)(this - 0xAAA);
  if ( v7 )
    result = sub_10036C30(
               a2,
               a3,
               a4,
               a5,
               a6,
               *(_DWORD *)(v7 + 1),
               *(_WORD *)(v7 + 5),
               0,
               a7,
               dword_100EC770,
               dword_100EC774,
               0);
  else
    result = 0;
  return result;
}
Тоже самое в asm:
.text:10030B30 sub_10030B30    proc near               ; DATA XREF: .rdata:100D534C↓o
.text:10030B30
.text:10030B30 arg_0           = dword ptr  4
.text:10030B30 arg_4           = dword ptr  8
.text:10030B30 arg_8           = dword ptr  0Ch
.text:10030B30 arg_C           = dword ptr  10h
.text:10030B30 arg_10          = dword ptr  14h
.text:10030B30 arg_14          = dword ptr  18h
.text:10030B30
.text:10030B30                 mov     eax, [ecx-0AAAh]
.text:10030B36                 test    eax, eax
.text:10030B38                 push    esi
.text:10030B39                 jnz     short loc_10030B41
.text:10030B3B                 xor     al, al
.text:10030B3D                 pop     esi
.text:10030B3E                 retn    18h
.text:10030B41 ; ---------------------------------------------------------------------------
.text:10030B41
.text:10030B41 loc_10030B41:                           ; CODE XREF: sub_10030B30+9↑j
.text:10030B41                 mov     edx, dword_100EC774
.text:10030B47                 push    0
.text:10030B49                 push    edx
.text:10030B4A                 mov     edx, dword_100EC770
.text:10030B50                 push    edx
.text:10030B51                 mov     edx, [esp+10h+arg_14]
.text:10030B55                 push    edx
.text:10030B56                 push    0
.text:10030B58                 sub     esp, 8
.text:10030B5B                 inc     eax
.text:10030B5C                 mov     esi, [eax]                         ; Ошибка доступа
.text:10030B5E                 mov     ax, [eax+4]
.text:10030B62                 mov     edx, esp
.text:10030B64                 mov     [edx], esi
.text:10030B66                 mov     [edx+4], ax
.text:10030B6A                 mov     edx, [esp+20h+arg_10]
.text:10030B6E                 mov     eax, [esp+20h+arg_C]
.text:10030B72                 push    edx
.text:10030B73                 mov     edx, [esp+24h+arg_8]
.text:10030B77                 push    eax
.text:10030B78                 mov     eax, [esp+28h+arg_4]
.text:10030B7C                 push    edx
.text:10030B7D                 mov     edx, [esp+2Ch+arg_0]
.text:10030B81                 push    eax
.text:10030B82                 push    edx
.text:10030B83                 add     ecx, 0FFFFF222h
.text:10030B89                 call    sub_10036C30
.text:10030B8E                 pop     esi
.text:10030B8F                 retn    18h
.text:10030B8F sub_10030B30    endp

При попытке использовать ее, передав в качестве this [ [ dwSAMP + SAMP_INFO_OFFSET ] + SAMP_RAKCLIENT_INTERFACE ] игру крашит. В 6 строчке переменной v7 присваевается значение по адресу this - 0xAAA (в каких вообще случаях бывает отрицательный сдвиг от this?), и в 14 строке получаю ошибку доступа. Может, функция не та?
Это RPC, принимает 6 параметров (7 для thiscall). Чтобы функция работала, нужно поместить указатель на RakClientInterface в регистр ecx, или передать в виде параметра функции типа thiscall
 

index

Известный
126
82
Чтобы функция работала, нужно поместить указатель на RakClientInterface в регистр ecx, или передать в виде параметра функции типа thiscall
Я же описал, что проблема не в передаче параметров, а в самом адресе. Ошибка происходит на инструкции mov esi, [eax] при попстке доступа к неаллоцированной памяти.
Ставил брейк, смотрел регистры когда игра сама пользовалась этой функцией, в ecx был было значение, которое можно найти по адресу [ [ dwSAMP + SAMP_INFO_OFFSET ] + SAMP_RAKCLIENT_INTERFACE ] + XXX , где XXX - всегда небольшое смещение меняющееся при перезапуске игры. Странно это...

UPD: Разобрался. У меня стоит плагин, который подменяет значение указателя pRakClientInterface в структуре stSAMP на своё.
 
Последнее редактирование:

Stiopko

Известный
Проверенный
307
218
C++:
GAME->GetWorld()->ProcessLineOfSight
Подскажите, что это за параметры, и за что они отвечают?
C++:
CColPoint ** colCollision, CEntity ** CollisionEntity
 
  • Нравится
Реакции: Ya Zaregalsya

damag

Женюсь на официантке в моем любимом баре
Проверенный
1,152
1,199
Вообщем вопрос. Видел не которые имгуи которые не видны на shadow play, как можно это сделать?