в WNDProcкак исправить, при закрытии имгуи окна мой персонаж начинает бить, ну как обычно нажимаешь ЛКМ, хотя не должен
if (state.bMenuOpened) {
if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))
{
return true;
}
ImGuiIO& io = ImGui::GetIO();
if (io.WantCaptureMouse || io.WantCaptureKeyboard)
{
return true;
}
}
В 135 строчке ошибка и ещё в 3 замени deque на vectorВсем привет, делаю свой проект на samp mobile и заметел, что анимации которые я делаю - не видят другие игроки? если не сложно обьясните, в чем причина, где я ошибся?
а может знаешь пайплайн рендера авто?Кстати выше - не самое лучшее решение. Лучше хукать DrawIndexedPrimitive в пайплайне рендера педов(0x761142) и выставлять цвет пикселей через константы или пиксельный шейдер. Пример:
C:sampler2D tex0 : register(s0); extern float3 dy: register(c0); float4 main(float2 tc : TEXCOORD0) : COLOR { return tex2D(tex0, tc) * float4(dy[0], dy[1], dy[2], 1.0); }
C++:{ HRSRC hsrc = FindResourceW(reinterpret_cast<HMODULE>(hmdl), MAKEINTRESOURCEW(IDR_HLSL2), L"HLSL"); PVOID shader = LockResource(LoadResource(reinterpret_cast<HMODULE>(hmdl), hsrc)); pDevice->CreatePixelShader(reinterpret_cast<DWORD*>(shader), &pPixelShader); }
C++:pDevice->SetPixelShader(pPixelShader); // Rainbow lol if (bTact) { HSVtoRGB(RGB[0], RGB[1], RGB[2], color[0], color[1], color[2]); color[0] += 2.0f; if (color[0] >= 360.0f) color[0] -= 360.0f; bTact = false; } pDevice->SetPixelShaderConstantF(0, RGB, 1); fpHkDrawIndexedPrimitive(pDevice, Type, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount); pDevice->SetPixelShader(nullptr); return D3D_OK;
class RenderClass
{
public:
bool m_bIsEnabled{ false }; // визуалка 2019 показывает ошибку тут
std::string m_sName{ "" };
private:
std::vector<ObjectRender> m_objectsRenders;
std::vector<Text3dRender> m_text3dRenders;
std::vector<PickupRender> m_pickupRenders;
public:
RenderClass();
RenderClass(const char* szName);
void ReadWrite(READ_WRITE_PARAMS);
bool areAnyObjectRendersEnabled();
bool areAnyickupRendersEnabled();
bool areAnyText3DRendersEnabled();
void renderPickups(RenderPickup_ObjectData* pRenderPickupData);
void renderObjects(RenderPickup_ObjectData* pRenderObjectData);
void render3DTexts(Render3DTextData* p3DTextData);
void drawEditor(size_t spl);
void drawMenu(size_t i);
};
void CustomRender::ReadWrite(READ_WRITE_PARAMS)
{
using namespace std::chrono_literals;
try
{
FIELD_IV4(customRenderData.vec4Color);
FIELD(customRenderData.bDrawLine);
FIELD(customRenderData.m_fFontScale);
FIELD(m_bEnabled);
if (bRead)
{
size_t i = 0;
while (true)
{
if (data["class"][std::to_string(i).c_str()].is_null())
break;
auto&& renderClass = m_classes.emplace_back(); // вот тут ошибка
renderClass.ReadWrite(data["class"][std::to_string(i).c_str()], bRead);
i++;
}
}
else
{
for (size_t i = 0; i < m_classes.size(); i++)
m_classes[i].ReadWrite(data["class"][std::to_string(i).c_str()], bRead);
}
}
catch (...) { setDefaultSettings(); }
}
Ну как минимум emplace_back возвращает lvalue reference, а у тебя auto&&, который rvalue referenceвсем привет, я столкнулся с прикольной проблемой, она заключается в том, что ИНОГДА std::vector<someclass> при emplace_back у меня выбивает исключение this = nullptr
код класса
Код с самим emplace_back()C++:class RenderClass { public: bool m_bIsEnabled{ false }; // визуалка 2019 показывает ошибку тут std::string m_sName{ "" }; private: std::vector<ObjectRender> m_objectsRenders; std::vector<Text3dRender> m_text3dRenders; std::vector<PickupRender> m_pickupRenders; public: RenderClass(); RenderClass(const char* szName); void ReadWrite(READ_WRITE_PARAMS); bool areAnyObjectRendersEnabled(); bool areAnyickupRendersEnabled(); bool areAnyText3DRendersEnabled(); void renderPickups(RenderPickup_ObjectData* pRenderPickupData); void renderObjects(RenderPickup_ObjectData* pRenderObjectData); void render3DTexts(Render3DTextData* p3DTextData); void drawEditor(size_t spl); void drawMenu(size_t i); };
C++:void CustomRender::ReadWrite(READ_WRITE_PARAMS) { using namespace std::chrono_literals; try { FIELD_IV4(customRenderData.vec4Color); FIELD(customRenderData.bDrawLine); FIELD(customRenderData.m_fFontScale); FIELD(m_bEnabled); if (bRead) { size_t i = 0; while (true) { if (data["class"][std::to_string(i).c_str()].is_null()) break; auto&& renderClass = m_classes.emplace_back(); // вот тут ошибка renderClass.ReadWrite(data["class"][std::to_string(i).c_str()], bRead); i++; } } else { for (size_t i = 0; i < m_classes.size(); i++) m_classes[i].ReadWrite(data["class"][std::to_string(i).c_str()], bRead); } } catch (...) { setDefaultSettings(); } }
Ну как минимум emlace_back возвращает lvalue reference, а у тебя auto&&, который rvalue reference
всё равно выбивает, в консоль не выводиться сообщение о исключении, не доходит до него(я не забыл добавить)А зачем 2 &&? Один вроде нужен. Да и лучше обращаться к елементам контейнеров через at и попробуй еще в try catch взять код и посмотреть, что за ошибку выдает.
try catch не ловит сегфолтыtry catch взять код и посмотреть, что за ошибку выдает.
попробуй добавитьтак похоже что выбивает только при отладке в визуал студии
или просто намного чаще