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

вайега52

Налуашил состояние
Модератор
2,976
3,094
Из-за чего может не реагировать менюшка на курсор (нажатия, растягивание), при этом скролл меню при помощи колесика и шифта работает?

C++:
void menu::set_visible(bool visible) {
  this->visible = visible;
  if (!visible)
    sampapi::v037r3::RefGame()->SetCursorMode(sampapi::v037r3::CURSOR_NONE, 1);
  ;
}

void menu::present() {
  if (!visible) return;

  ImGui_ImplDX9_NewFrame();
  ImGui_ImplWin32_NewFrame();
  ImGui::NewFrame();

  ImGui::SetNextWindowPos(
      ImVec2(RsGlobal.maximumWidth / 2, RsGlobal.maximumHeight / 2),
      ImGuiCond_FirstUseEver, ImVec2(0.5, 0.5));
  ImGui::SetNextWindowSize(ImVec2(700, 420), ImGuiCond_FirstUseEver);
  if (ImGui::Begin("abcde", nullptr, ImGuiWindowFlags_NoCollapse)) {
    sampapi::v037r3::RefGame()->SetCursorMode(sampapi::v037r3::CURSOR_LOCKCAM,
                                              0);
      // render

    ImGui::End();
  }

  ImGui::EndFrame();
  ImGui::Render();
  ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
}

bool menu::wndproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  switch (uMsg) {
    case WM_CHAR: {
      wchar_t wch;
      MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,
                          reinterpret_cast<char*>(&wParam), 1, &wch, 1);
      wParam = wch;
      break;
    }
    case WM_KEYUP:
      if (wParam == VK_ESCAPE) set_visible(false);
      break;
  }

  ImGui_ImplWin32_WndProcHandler(hwnd, uMsg, wParam, lParam);
  auto& io = ImGui::GetIO();
  if (io.WantCaptureKeyboard || io.WantCaptureMouse) {
    return false;
  }
  return true;
}
 

Smeruxa

smeruxa.ru
Проверенный
1,427
786
Из-за чего может не реагировать менюшка на курсор (нажатия, растягивание), при этом скролл меню при помощи колесика и шифта работает?

C++:
void menu::set_visible(bool visible) {
  this->visible = visible;
  if (!visible)
    sampapi::v037r3::RefGame()->SetCursorMode(sampapi::v037r3::CURSOR_NONE, 1);
  ;
}

void menu::present() {
  if (!visible) return;

  ImGui_ImplDX9_NewFrame();
  ImGui_ImplWin32_NewFrame();
  ImGui::NewFrame();

  ImGui::SetNextWindowPos(
      ImVec2(RsGlobal.maximumWidth / 2, RsGlobal.maximumHeight / 2),
      ImGuiCond_FirstUseEver, ImVec2(0.5, 0.5));
  ImGui::SetNextWindowSize(ImVec2(700, 420), ImGuiCond_FirstUseEver);
  if (ImGui::Begin("abcde", nullptr, ImGuiWindowFlags_NoCollapse)) {
    sampapi::v037r3::RefGame()->SetCursorMode(sampapi::v037r3::CURSOR_LOCKCAM,
                                              0);
      // render

    ImGui::End();
  }

  ImGui::EndFrame();
  ImGui::Render();
  ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
}

bool menu::wndproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  switch (uMsg) {
    case WM_CHAR: {
      wchar_t wch;
      MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,
                          reinterpret_cast<char*>(&wParam), 1, &wch, 1);
      wParam = wch;
      break;
    }
    case WM_KEYUP:
      if (wParam == VK_ESCAPE) set_visible(false);
      break;
  }

  ImGui_ImplWin32_WndProcHandler(hwnd, uMsg, wParam, lParam);
  auto& io = ImGui::GetIO();
  if (io.WantCaptureKeyboard || io.WantCaptureMouse) {
    return false;
  }
  return true;
}
C++:
if (io.WantCaptureKeyboard || io.WantCaptureMouse) {
    return true;
}
 
  • Влюблен
Реакции: вайега52

swlm

Участник
47
15
Кто то работал с номерами GTA? Нужно установить кастомный номер на машину, а получается пока только на модель. Помогите.


C++:
srand(static_cast<unsigned>(time(0)));
int randomNumber = 1000 + rand() % 49001;
char randomPlateText[9];
sprintf(randomPlateText, "%d", randomNumber);
const auto plateRaster = RwRasterCreate(64, 16, 32, rwRASTERFORMAT888 | rwRASTERPIXELLOCKEDWRITE);
if (!plateRaster) return true;
if (!RwTextureGetRaster(pCharsetTex)) {
    RwRasterDestroy(plateRaster);
    return true;
}
if (!RenderLicenseplateTextToRaster(randomPlateText, RwTextureGetRaster(pCharsetTex), CCustomCarPlateMgr::pPalette1555Tab[ResolvePlateType(modelInfo->m_nPlateType)], plateRaster)) {
    RwRasterDestroy(plateRaster);
    return true;
}
if (const auto plateTex = RwTextureCreate(plateRaster)) {
    RwTextureSetName(plateTex, randomPlateText);
    RwTextureSetFilterMode(plateTex, rwFILTERNEAREST);
}
Пробовали этим способом, ставит только на передний номер.
 

Nexter1

Участник
34
7
Почему игра может вылетать?

deletee:
void deletee(const char* params) {
    auto id = atoi(params);
    sampapi::v037r3::RefNetGame()->GetPlayerPool()->GetPlayer(id)->Remove();
}
 

вайега52

Налуашил состояние
Модератор
2,976
3,094
Почему игра может вылетать?

deletee:
void deletee(const char* params) {
    auto id = atoi(params);
    sampapi::v037r3::RefNetGame()->GetPlayerPool()->GetPlayer(id)->Remove();
}
я бы добавил обработчик исключений для atoi + добавил проверку на то, что игрок с таким id существует
 

Nexter1

Участник
34
7
я бы добавил обработчик исключений для atoi + добавил проверку на то, что игрок с таким id существует
Да именно крашит когда существующий ид игрока (в зоне стрима) ввожу. Если игрока нет в зоне стрима - ничего не происходит.
 
  • Вау
Реакции: вайега52

Nexter1

Участник
34
7
Как можно в sampapi выключить коллизию у объекта? (определенного по id) в cobject не нашел ничего связанного с этим
 
Последнее редактирование:

вайега52

Налуашил состояние
Модератор
2,976
3,094
Как можно в sampapi выключить коллизию у объекта? (определенного по id) в cobject не нашел ничего связанного с этим
CObject наследуется от CEntity, то есть имеет все его поля
 
  • Влюблен
Реакции: Nexter1

Smeruxa

smeruxa.ru
Проверенный
1,427
786
Почему крашит при использовании?
C++:
sampapi::v037r1::RefNetGame()->GetPlayerPool()->GetLocalPlayer()->m_onfootData.m_controllerState.m_bRightShoulder1
Это в условие сую, как я понял, плагин вызывает краш на этапе с GetLocalPlayer
Криво косо что-то попытался сделать так sampapi::v037r1::CLocalPlayer* localPlayer = *(sampapi::v037r1::CLocalPlayer**)0xB6F5F0;
Но не срабатывало, хоть краш и пропал 😅
 

maksmanus228

Активный
133
59
добрый день, у меня есть новая функция UpdateNetwork (пока что переписанная с idb сампа) и у меня крашит игра при попытке прописать packet->data
вот код
[/I] void __fastcall SSmpPackets::UpdateNetwork(CNetGame* game, void* edx) { Packet* packet = nullptr; uint8_t* localdata = nullptr; uint8_t state {}; for(packet = game->m_pRakClient->Receive(); packet; packet = game->m_pRakClient->Receive()) { localdata = packet->data; if(*localdata == 40) state = localdata[5]; switch(state) { case 12: game->Packet_AuthKey(packet); break; case 29: { AddDebugMessage("The server didn't respond. Retrying.."); game->m_nGameState = 1; break; } case 31: { AddDebugMessage("The server didn't respond. Retrying.."); break; } case 32: game->Packet_DisconnectionNotification(packet); break; case 33: game->Packet_ConnectionLost(packet); break; case 34: game->Packet_ConnectionSucceeded(packet); break; case 35: AddDebugMessage("Failed to initialize encryption."); break; case 36: AddDebugMessage("You are banned from this server."); break; case 37: { AddDebugMessage("Wrong server password."); game->m_pRakClient->Disconnect(0, 0); break; } case 200: game->Packet_VehicleSync(packet); break; case 203: game->Packet_AimSync(packet); break; case 206: game->Packet_BulletSync(packet); break; case 207: game->Packet_PlayerSync(packet); break; case 208: game->Packet_MarkersSync(packet); break; case 209: game->Packet_UnoccupiedSync(packet); break; case 210: game->Packet_TrailerSync(packet); break; case 211: game->Packet_PassengerSync(packet); break; default: break; } game->m_pRakClient->DeallocatePacket(packet); } } [I]

В чем может быть дело? структура Packet взяты из этого репозитория:

рак нет для сампа

и еще: работает ли правильно структура Packet2 от этого же репозитория