Есть у меня вот такой замечательный код для отрисовки боксов, нейма и скелета:
Проблема код заключается в том, что при смерти противника на каком либо подобии дезмача, после респавна на доли секунд отрисовываются старые координаты рук, все остальные (плечи, боди, ноги, голова) рисуются как надо. Код дебажил, и пришел к такому выводу.
Вот такая вот хуйня:
C++:
for (int i = 1; i < 64; i++) {
uintptr_t entityList = M::R<uintptr_t>(Vars::client + O::dwEntityList);
if (!entityList) return;
uintptr_t list_entry1 = M::R<uintptr_t>(entityList + ((8 * (i & 0x7FFF) >> 9) + 16));
if (!list_entry1) continue;
uintptr_t playerController = M::R<uintptr_t>(list_entry1 + (120) * (i & 0x1FF));
if (!playerController) continue;
uint32_t playerPawn = M::R<uint32_t>(playerController + O::m_hPlayerPawn);
if (!playerPawn) continue;
uintptr_t list_entry2 = M::R<uintptr_t>(entityList + (0x8 * ((playerPawn & 0x7FFF) >> 9) + 16));
if (!list_entry2) continue;
uintptr_t pCSPlayerPawnPtr = M::R<uintptr_t>(list_entry2 + (120) * (playerPawn & 0x1FF));
if (!pCSPlayerPawnPtr) continue;
uintptr_t sceneNode = M::R<uintptr_t>(pCSPlayerPawnPtr + O::m_pGameSceneNode);
if (!sceneNode) continue;
uintptr_t boneMatrix = M::R<uintptr_t>(sceneNode + O::m_modelState + 0x80);
if (!boneMatrix) continue;
struct CSEntity {
char name[128];
};
int health = M::R<int>(pCSPlayerPawnPtr + O::m_iHealth);
if (!health) continue;
int team = M::R<int>(pCSPlayerPawnPtr + O::m_iTeamNum);
if (!team) continue;
CSEntity playerName = M::R<CSEntity>(playerController + O::m_iszPlayerName);
if (!playerName.name) continue;
if (MenuVars::Visuals::teamCheck)
if (team == localTeam) continue;
if (pCSPlayerPawnPtr == localPawn) continue;
if (health <= 0 || health > 100) continue;
Vec3 pos = M::R<Vec3>(pCSPlayerPawnPtr + O::m_vOldOrigin);
if (!pos.x) continue;
Vec3 feetPos = { pos.x, pos.y, pos.z - 5.0f };
Vec3 headPos = M::R<Vec3>(boneMatrix + 6 * 32);
if (!headPos.x) continue;
headPos.z += 8.f;
Vec2 feet, head;
if (MenuVars::Visuals::esp) {
if (pos.WorldToScreen(feet, viewMatrix) && headPos.WorldToScreen(head, viewMatrix))
{
ImVec2 dif = ImVec2((feet.y - head.y) / 4, 0);
if (feet.x > head.x) {
auto ox = feet.x;
feet.x = head.x;
head.x = ox;
}
pDrawList->AddRect(fl(ImVec2(head.x + dif.x + 1, head.y - 1)), fl(ImVec2(feet.x - dif.x - 1, feet.y + 1)), ImColor(0, 0, 0, 200), 0, 0, 1);
pDrawList->AddRect(fl(ImVec2(head.x + dif.x - 1, head.y + 1)), fl(ImVec2(feet.x - dif.x + 1, feet.y - 1)), ImColor(0, 0, 0, 200), 0, 0, 1);
pDrawList->AddRect(fl(ImVec2(head.x + dif.x, head.y)), fl(ImVec2(feet.x - dif.x, feet.y)), MenuVars::Visuals::espColor, 0, 0, 1);
}
}
if (MenuVars::Visuals::nameEsp) {
if (pos.WorldToScreen(feet, viewMatrix) && headPos.WorldToScreen(head, viewMatrix))
{
ImVec2 dif = ImVec2((feet.y - head.y) / 4, 0);
if (feet.x > head.x) {
auto ox = feet.x;
feet.x = head.x;
head.x = ox;
}
pDrawList->AddText(fl(ImVec2(feet.x - ImGui::CalcTextSize(playerName.name).x / 2 + 1, head.y - ImGui::CalcTextSize(playerName.name).y - 5 + 1)), ImColor(0, 0, 0, 200), playerName.name);
pDrawList->AddText(fl(ImVec2(feet.x - ImGui::CalcTextSize(playerName.name).x / 2, head.y - ImGui::CalcTextSize(playerName.name).y - 5)), ImColor(255, 255, 255), playerName.name);
}
}
if (MenuVars::Visuals::skeleton) {
BodyPart bodyParts[13];
for (int i = 0; i < 13; i++) {
int boneIndex = boneMapping[i];
Vec3 oldPos = bodyParts[i].oldPosition;
bodyParts[i].position = M::R<Vec3>(boneMatrix + boneIndex * 32);
if (!bodyParts[i].position) continue;
bodyParts[i].isValid = bodyParts[i].position.WorldToScreen(bodyParts[i].screenPos, viewMatrix);
}//bad hands after respawn
for (const auto& conn : connections) {
const BodyPart& p1 = bodyParts[conn.first];
const BodyPart& p2 = bodyParts[conn.second];
if (p1.isValid && p2.isValid) {
ImVec2 screenP1(p1.screenPos.x, p1.screenPos.y);
ImVec2 screenP2(p2.screenPos.x, p2.screenPos.y);
pDrawList->AddLine(screenP1, screenP2, MenuVars::Visuals::espSkeleton);
}
}
if (bodyParts[2].isValid) {
ImVec2 head(bodyParts[2].screenPos.x, bodyParts[2].screenPos.y);
pDrawList->AddCircle(head, 3.0f, MenuVars::Visuals::espSkeleton);
}
}
}
Проблема код заключается в том, что при смерти противника на каком либо подобии дезмача, после респавна на доли секунд отрисовываются старые координаты рук, все остальные (плечи, боди, ноги, голова) рисуются как надо. Код дебажил, и пришел к такому выводу.
Вот такая вот хуйня:
