Untitled
unknown
c_cpp
9 months ago
12 kB
13
Indexable
// in my DataRead.cpp
std::vector<PlayerData> batchReadAllPlayerData() {
inGame = in_game();
if (inGame) {
if (!hasCachedData) {
ReadOnce();
}
std::vector<PlayerData> playersData;
uintptr_t cameraBasePointer = cameraBase;
vec3_t cameraPosition;
vec2_t cameraAngles;
size_t localPlayerIndex = local_index();
int playerCount = driver::read<int>(sdk::module_base + offsets::BO6::game_mode);
playersData.resize(playerCount);
auto sizeOfPlayersData = playersData.size();
if (cameraBasePointer) {
uintptr_t cameraPositionAddress = cameraBasePointer + offsets::BO6::camera_pos;
uintptr_t cameraAnglesAddress = cameraPositionAddress + 0xC;
cameraPosition = get_cam_affected();
cameraAngles = driver::read<vec2_t>(cameraAnglesAddress);
}
std::vector<vec3_t> positions(sizeOfPlayersData);
std::vector<uintptr_t> positionPointers(sizeOfPlayersData);
std::vector<NameEntry> nameEntryBuffer(sizeOfPlayersData);
std::vector<Scoreboard> scoreboardBuffer(sizeOfPlayersData);
for (size_t i = 0; i < sizeOfPlayersData; ++i) {
playersData[i].isLocalPlayer = (i == localPlayerIndex);
uintptr_t baseAddress = sdk::client_info_base + (i * offsets::BO6::player::size);
positionPointers[i] = driver::read<uintptr_t>(baseAddress + offsets::BO6::player::pos);
playersData[i].teamId = driver::read<uint8_t>(baseAddress + offsets::BO6::player::team);
playersData[i].stance = driver::read<int>(baseAddress + offsets::BO6::player::stance);
nameEntryBuffer[i] = driver::read<NameEntry>(baseNameListAddress + (i * offsets::BO6::name_size));
scoreboardBuffer[i] = driver::read<Scoreboard>(baseScoreboardAddress + (i * offsets::BO6::scoreboard_size));
}
for (size_t i = 0; i < positionPointers.size(); ++i) {
if (positionPointers[i] != 0) {
if (i == 9 && settings::settingsSettings::indexNineFix) {
positions[i] = driver::read<vec3_t>(positionPointers[i] + 0x50);
}
else {
positions[i] = driver::read<vec3_t>(positionPointers[i] + 0x50);
}
}
}
for (size_t i = 0; i < playersData.size(); ++i) {
if (positionPointers[i] != 0) {
playersData[i].position = positions[i];
}
const auto& nameEntry = nameEntryBuffer[i];
const auto& scoreboard = scoreboardBuffer[i];
std::memcpy(playersData[i].name, nameEntry.name, sizeof(nameEntry.name) - 1);
playersData[i].name[sizeof(nameEntry.name) - 1] = '\0';
playersData[i].health = nameEntry.health;
playersData[i].isVisible = is_player_visible(sdk::client_info, i);
playersData[i].scoreboard = scoreboard;
bool isHealthZero = (nameEntry.health <= 0);
bool isStatusDead = (scoreboard.status == 2);
bool isPingZero = (!settings::settingsSettings::inPrivateMatch && scoreboard.ping == 0);
bool isActiveTeam = (scoreboard.team == 0);
if (playersData[i].health < 1 && !playersData[i].isVisible) {
continue;
}
playersData[i].isDead = isHealthZero || isStatusDead || isPingZero || isActiveTeam;
}
// Set Camera Data
if (cameraBasePointer) {
for (auto& player : playersData) {
player.cameraPosition = cameraPosition;
player.cameraAngles = cameraAngles;
}
}
return playersData;
}
else {
hasCachedData = false;
}
}
// in my esp.cpp
void RenderEsp(const std::vector<PlayerData>& playersData, PlayerData localPlayer, ref_def_t ref_def) {
const float halfScreenWidth = ref_def.width / 2;
const float halfScreenHeight = ref_def.height / 2;
static int pGM = -1;
int cGM = driver::read<int>(sdk::module_base + offsets::BO6::game_mode);
/*if (cGM != pGM) {
pGM = cGM;
return;
}*/
if (cGM <= 1) {
return;
}
if (settings::aimSettings::DrawCircleFOV) {
ImGui::GetOverlayDrawList()->AddCircle(ImVec2(halfScreenWidth, halfScreenHeight), settings::fov, settings::visualsSettings::FovColor, 100);
}
if (settings::aimSettings::crosshair) {
ImVec2 center(halfScreenWidth, halfScreenHeight);
ImVec2 horizontalLineStart(center.x - 12, center.y);
ImVec2 horizontalLineEnd(center.x + 12, center.y);
ImVec2 verticalLineStart(center.x, center.y - 12);
ImVec2 verticalLineEnd(center.x, center.y + 12);
auto drawList = ImGui::GetBackgroundDrawList();
drawList->AddLine(horizontalLineStart, horizontalLineEnd, settings::visualsSettings::crosshaircolor, 1.0f);
drawList->AddLine(verticalLineStart, verticalLineEnd, settings::visualsSettings::crosshaircolor, 1.0f);
}
/*if (settings::visualsSettings::enableLootEsp) {
auto draw = ImGui::GetForegroundDrawList();
auto lootList = BO6::get_all_loot();
for (const auto& loot : lootList) {
if (!loot.is_valid()) {
continue; // Skip invalid loot
}
vec3_t lootPos = loot.get_position();
vec2_t screenPos;
if (espw2s(lootPos, screenPos)) {
float dist = units_to_m(localPlayer.position.distance_to(lootPos));
if (dist > 1.0f && dist < settings::visualsSettings::lootDist) {
std::string lootName = loot.get_name();
ImU32 lootColor = loot.is_supply()
? ImGui::GetColorU32(ImVec4(1.0f, 0.5f, 0.0f, 1.0f)) // Supply loot (orange)
: ImGui::GetColorU32(ImVec4(0.0f, 1.0f, 0.0f, 1.0f)); // Regular loot (green)
// Draw loot name
draw->AddText(ImVec2(screenPos.x, screenPos.y), lootColor, lootName.c_str());
// Optionally draw distance
if (settings::visualsSettings::lootDist) {
char distanceText[32];
snprintf(distanceText, sizeof(distanceText), "[%.1f m]", dist);
draw->AddText(ImVec2(screenPos.x, screenPos.y + 12), lootColor, distanceText);
}
}
}
}
}*/
if (settings::visualsSettings::enableEsp) {
auto draw = ImGui::GetForegroundDrawList();
for (size_t i = 0; i < playersData.size(); ++i) {
esp_t esp(sdk::client_info_base + (i * offsets::BO6::player::size));
auto player = playersData[i];
auto sizeOfPlayersData = playersData.size();
std::vector<Scoreboard> scoreboardBuffer(sizeOfPlayersData);
const auto bone_index = offsets::BO6::decrypt_bone_index(i, sdk::module_base);
const auto bone_ptr = BO6::get_bone_ptr(sdk::bone_base, bone_index);
const auto& scoreboard = scoreboardBuffer[i];
if (player.health < 1 && !player.isVisible) {
continue;
}
if ((!settings::reddot && player.teamId == localPlayer.teamId) || player.isDead || scoreboard.status == 2 ||
(settings::visualsSettings::legitEsp && !player.isVisible)) {
continue;
}
vec2_t screen;
vec3_t pos = player.position;
if (w2s(pos, screen, player)) {
auto dist = units_to_m(localPlayer.position.distance_to(player.position));
if (dist > 1.0f && dist < settings::visualsSettings::maxespdist) {
vec2_t screenHead;
vec3_t headPos = pos;
headPos.z += 66.f;
if (w2s(headPos, screenHead, player)) {
float height = screen.y - screenHead.y;
float width = height * 0.25f;
ImVec2 boxUpperLeft(screenHead.x - width, screenHead.y);
ImVec2 boxLowerRight(screenHead.x + width, screen.y);
VisualParams params = CalculateVisualParams(dist, settings::visualsSettings::maxespdist, CLOSE_DISTANCE, 0.1f, 2.5f);
if (settings::visualsSettings::boxes) {
vec2_t headScreen, feetScreen;
vec3_t headPos = pos;
headPos.z += 66.f;
vec3_t feetPos = pos;
if (espw2s(headPos, headScreen) && espw2s(feetPos, feetScreen)) {
float height = abs(headScreen.y - feetScreen.y);
float width = height * 0.65f;
if (height > 0 && width > 0) {
ImU32 boxColor = player.isVisible
? ImGui::GetColorU32(ImVec4(settings::visualsSettings::boxColorVisible[0],
settings::visualsSettings::boxColorVisible[1],
settings::visualsSettings::boxColorVisible[2],
params.alpha))
: ImGui::GetColorU32(ImVec4(settings::visualsSettings::boxColorNotVisible[0],
settings::visualsSettings::boxColorNotVisible[1],
settings::visualsSettings::boxColorNotVisible[2],
params.alpha));
if (settings::boxStyles == 0) {
DrawBox(headScreen.x - width / 2, headScreen.y, width, height, player.isVisible, boxColor, settings::boxThickness, params);
}
else if (settings::boxStyles == 1) {
DrawPlayerCorneredBox(headScreen.x - width / 2, headScreen.y, width, height, player.isVisible, boxColor, settings::boxThickness, params);
}
}
}
}
if (settings::healthbars) {
DrawHealthBar(draw, player.health, 127.0f, boxUpperLeft, boxLowerRight, params);
}
if (settings::visualsSettings::nameesp) {
DrawPlayerName(draw, player.name, ImVec2(screenHead.x, boxUpperLeft.y + 10), params);
}
/*if (settings::visualsSettings::killsEsp) {
DrawPlayerKills(draw, player.scoreboard.kills, ImVec2(screenHead.x, boxLowerRight.y + 20), params);
}*/
if (settings::visualsSettings::distanceesp) {
DrawDistance(draw, dist, ImVec2(screen.x, screen.y - 20));
}
/// TODO: refactor for other games maybe.
if (settings::visualsSettings::boneesp) {
DrawBones(draw, player, i, params);
}
if (settings::visualsSettings::drawlines) {
ImVec2 startPoint = ImVec2(halfScreenWidth, settings::visualsSettings::linetype == 1 ? ref_def.height : halfScreenHeight);
ImVec2 endPoint = ImVec2(screen.x, screen.y);
DrawLines(draw, startPoint, endPoint, player.isVisible, params);
}
}
}
}
}
}
}Editor is loading...
Leave a Comment