mirror of
https://github.com/ApfelTeeSaft/OG-Fortnite-Cheat.git
synced 2026-08-26 19:33:33 +00:00
Bullet TP V2
- Added Bullet TP V2 - Added RaycastMulti function offset grabbing - Added RaycastMulti hook - Changed RaycastMulti and CalculateShot hook to only hook when required (less detection vectors) - Added box ESP types (Full and Cornered 2D only right now) - Moved math function bodies to new Math.cpp Bug-Fixes: - Fixed text issues in ImGui drawing - Fixed crash issues on release mode - Fixed crash issues on ImGui - Fixed GetPlayerViewpoint VFT index grabbing on S19 Minor Changes: - Made custom function to get weapon color from UFortItemDefinition
This commit is contained in:
@@ -17,6 +17,7 @@ namespace Config {
|
||||
inline KeyName AimKey = (KeyName)7;
|
||||
|
||||
inline bool BulletTP = false;
|
||||
inline bool BulletTPV2 = false;
|
||||
|
||||
inline bool SilentAim = false;
|
||||
inline bool UseAimKeyForSilent = false;
|
||||
@@ -84,11 +85,16 @@ namespace Config {
|
||||
inline int FOV = 20;
|
||||
}
|
||||
|
||||
inline ConfigTypes::BoxType BoxType = ConfigTypes::BoxType::Cornered2D;
|
||||
|
||||
inline bool Box = true;
|
||||
|
||||
inline bool Skeleton = true;
|
||||
inline bool IndividualBoneVisibilities = true;
|
||||
|
||||
inline bool Name = true;
|
||||
inline bool Distance = true;
|
||||
inline bool Weapon = true;
|
||||
inline bool CurrentWeapon = true;
|
||||
}
|
||||
|
||||
namespace Weapons {
|
||||
@@ -107,6 +113,11 @@ namespace Config {
|
||||
namespace Player {
|
||||
inline bool EditEnemyBuilds = false;
|
||||
|
||||
inline bool ADSWhileNotOnGround = false;
|
||||
inline bool DoublePump = false;
|
||||
|
||||
inline bool AllowRedeploy = false;
|
||||
|
||||
inline bool InfiniteBuilds = false;
|
||||
inline bool InfiniteAmmo = false;
|
||||
}
|
||||
|
||||
@@ -6,4 +6,11 @@ namespace ConfigTypes {
|
||||
Crosshair,
|
||||
Distance,
|
||||
};
|
||||
|
||||
enum class BoxType {
|
||||
Full3D,
|
||||
Cornered3D,
|
||||
Full2D,
|
||||
Cornered2D,
|
||||
};
|
||||
}
|
||||
@@ -36,14 +36,6 @@ void Drawing::BatchLineCache::Draw() {
|
||||
void Drawing::TextCache::Draw() {
|
||||
ImVec2 TextPosition = ImVec2(ScreenPosition.X, ScreenPosition.Y);
|
||||
|
||||
if (CentredX || CentredY) {
|
||||
ImVec2 TextSize = ImGui::GetFont()->CalcTextSizeA(FontSize, FLT_MAX, 0.0f, RenderText.c_str());
|
||||
ImVec2 CentredPos = ImVec2(ScreenPosition.X - TextSize.x / 2, ScreenPosition.Y - TextSize.y / 2);
|
||||
|
||||
if (CentredX) TextPosition.x = CentredPos.x;
|
||||
if (CentredY) TextPosition.y = CentredPos.y;
|
||||
}
|
||||
|
||||
if (Outlined) {
|
||||
ImU32 OutlineColor = ImColor(0.f, 0.f, 0.f, RenderColor.A);
|
||||
|
||||
@@ -55,8 +47,8 @@ void Drawing::TextCache::Draw() {
|
||||
};
|
||||
|
||||
for (ImVec2& Offset : Offsets) {
|
||||
ImVec2 outlinePos = ImVec2(TextPosition.x + Offset.x, TextPosition.y + Offset.y);
|
||||
ImGui::GetBackgroundDrawList()->AddText(Hooks::Present::LargeFont, FontSize, outlinePos, OutlineColor, RenderText.c_str());
|
||||
ImVec2 OutlinePos = ImVec2(TextPosition.x + Offset.x, TextPosition.y + Offset.y);
|
||||
ImGui::GetBackgroundDrawList()->AddText(Hooks::Present::LargeFont, FontSize, OutlinePos, OutlineColor, RenderText.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,9 +65,21 @@ void Drawing::CircleCache::Draw() {
|
||||
ImGui::GetBackgroundDrawList()->AddCircle(ImVec2(ScreenPosition.X, ScreenPosition.Y), Radius, ImColor(RenderColor.R, RenderColor.G, RenderColor.B, RenderColor.A), Segments);
|
||||
}
|
||||
void Drawing::FilledRectCache::Draw() {
|
||||
if (Outlined) {
|
||||
ImU32 OutlineColor = ImColor(0.f, 0.f, 0.f, RenderColor.A);
|
||||
|
||||
ImGui::GetBackgroundDrawList()->AddRectFilled(ImVec2(ScreenPosition.X, ScreenPosition.Y), ImVec2(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + ScreenSize.Y), OutlineColor);
|
||||
}
|
||||
|
||||
ImGui::GetBackgroundDrawList()->AddRectFilled(ImVec2(ScreenPosition.X, ScreenPosition.Y), ImVec2(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + ScreenSize.Y), ImColor(RenderColor.R, RenderColor.G, RenderColor.B, RenderColor.A));
|
||||
}
|
||||
void Drawing::RectCache::Draw() {
|
||||
if (Outlined) {
|
||||
ImU32 OutlineColor = ImColor(0.f, 0.f, 0.f, RenderColor.A);
|
||||
|
||||
ImGui::GetBackgroundDrawList()->AddRect(ImVec2(ScreenPosition.X, ScreenPosition.Y), ImVec2(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + ScreenSize.Y), OutlineColor, 0, 0, Thickness + 1.f);
|
||||
}
|
||||
|
||||
ImGui::GetBackgroundDrawList()->AddRect(ImVec2(ScreenPosition.X, ScreenPosition.Y), ImVec2(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + ScreenSize.Y), ImColor(RenderColor.R, RenderColor.G, RenderColor.B, RenderColor.A), 0, 0, Thickness);
|
||||
}
|
||||
void Drawing::TriangleCache::Draw() {
|
||||
@@ -100,17 +104,40 @@ void Drawing::TriangleCache::Draw() {
|
||||
}
|
||||
|
||||
void Drawing::RenderDrawingData() {
|
||||
std::lock_guard<std::mutex> Lock(DrawingMutex);
|
||||
|
||||
for (auto& RenderObject : RenderBuffer) {
|
||||
RenderObject->Draw();
|
||||
}
|
||||
}
|
||||
|
||||
void Drawing::Line(SDK::FVector2D ScreenPositionA, SDK::FVector2D ScreenPositionB, float Thickness, SDK::FLinearColor RenderColor, bool Outlined) {
|
||||
std::lock_guard<std::mutex> Lock(DrawingMutex);
|
||||
auto Cache = std::make_unique<LineCache>(ScreenPositionA, ScreenPositionB, Thickness, RenderColor, Outlined);
|
||||
DrawingQueue.push_back(std::move(Cache));
|
||||
}
|
||||
void Drawing::Text(const char* RenderText, SDK::FVector2D ScreenPosition, float FontSize, SDK::FLinearColor RenderColor, bool CentredX, bool CentredY, bool Outlined) {
|
||||
std::lock_guard<std::mutex> Lock(DrawingMutex);
|
||||
if (Hooks::Present::LargeFont == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto Cache = std::make_unique<TextCache>(RenderText, ScreenPosition, FontSize, RenderColor, CentredX, CentredY, Outlined);
|
||||
|
||||
// Handle centred text here so it doesn't go crazy
|
||||
if (CentredX || CentredY) {
|
||||
ImVec2 TextSize = Hooks::Present::LargeFont->CalcTextSizeA(FontSize, FLT_MAX, FLT_MAX, RenderText);
|
||||
ImVec2 CentredPos = ImVec2(ScreenPosition.X - TextSize.x / 2.f, ScreenPosition.Y - TextSize.y / 2.f);
|
||||
|
||||
if (CentredX) {
|
||||
Cache->ScreenPosition.X = CentredPos.x;
|
||||
}
|
||||
|
||||
if (CentredY) {
|
||||
Cache->ScreenPosition.Y = CentredPos.y;
|
||||
}
|
||||
}
|
||||
|
||||
DrawingQueue.push_back(std::move(Cache));
|
||||
}
|
||||
void Drawing::Text(const wchar_t* RenderText, SDK::FVector2D ScreenPosition, float FontSize, SDK::FLinearColor RenderColor, bool CentredX, bool CentredY, bool Outlined) {
|
||||
@@ -135,39 +162,51 @@ SDK::FVector2D Drawing::TextSize(const wchar_t* RenderText, float FontSize) {
|
||||
return SDK::FVector2D(TextSize.x, TextSize.y);
|
||||
}
|
||||
void Drawing::Circle(SDK::FVector2D ScreenPosition, float Radius, int32_t Segments, SDK::FLinearColor RenderColor, bool Outlined) {
|
||||
std::lock_guard<std::mutex> Lock(DrawingMutex);
|
||||
auto Cache = std::make_unique<CircleCache>(ScreenPosition, Radius, Segments, RenderColor, Outlined);
|
||||
DrawingQueue.push_back(std::move(Cache));
|
||||
}
|
||||
void Drawing::FilledRect(SDK::FVector2D ScreenPosition, SDK::FVector2D ScreenSize, SDK::FLinearColor RenderColor, bool Outlined) {
|
||||
std::lock_guard<std::mutex> Lock(DrawingMutex);
|
||||
auto Cache = std::make_unique<FilledRectCache>(ScreenPosition, ScreenSize, RenderColor, Outlined);
|
||||
DrawingQueue.push_back(std::move(Cache));
|
||||
}
|
||||
void Drawing::Rect(SDK::FVector2D ScreenPosition, SDK::FVector2D ScreenSize, float Thickness, SDK::FLinearColor RenderColor, bool Outlined) {
|
||||
std::lock_guard<std::mutex> Lock(DrawingMutex);
|
||||
auto Cache = std::make_unique<RectCache>(ScreenPosition, ScreenSize, Thickness, RenderColor, Outlined);
|
||||
DrawingQueue.push_back(std::move(Cache));
|
||||
}
|
||||
void Drawing::CorneredRect(SDK::FVector2D ScreenPosition, SDK::FVector2D ScreenSize, float Thickness, SDK::FLinearColor RenderColor, bool Outlined) {
|
||||
std::lock_guard<std::mutex> Lock(DrawingMutex);
|
||||
float LineW = ScreenSize.X / 4;
|
||||
float LineH = ScreenSize.Y / 4;
|
||||
float Overlap = max(Thickness, 1.0f);
|
||||
|
||||
float Correction = Thickness;
|
||||
Correction -= 2.f;
|
||||
Correction *= -1;
|
||||
|
||||
auto Cache = std::make_unique<BatchLineCache>();
|
||||
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y), SDK::FVector2D(ScreenPosition.X + LineW - Thickness / 2 + Overlap, ScreenPosition.Y), Thickness, RenderColor, Outlined));
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y), SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y + LineH - Thickness / 2 + Overlap), Thickness, RenderColor, Outlined));
|
||||
// Top-left corner horizontal and vertical
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X + Correction, ScreenPosition.Y), SDK::FVector2D(ScreenPosition.X + LineW, ScreenPosition.Y), Thickness, RenderColor, Outlined));
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y + Correction), SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y + LineH), Thickness, RenderColor, Outlined));
|
||||
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X + ScreenSize.X - LineW + Thickness / 2 - Overlap, ScreenPosition.Y), SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y), Thickness, RenderColor, Outlined));
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y), SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + LineH - Thickness / 2 + Overlap), Thickness, RenderColor, Outlined));
|
||||
// Top-right corner horizontal and vertical
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X + ScreenSize.X - LineW, ScreenPosition.Y), SDK::FVector2D(ScreenPosition.X + ScreenSize.X - Correction, ScreenPosition.Y), Thickness, RenderColor, Outlined));
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + Correction), SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + LineH), Thickness, RenderColor, Outlined));
|
||||
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y + ScreenSize.Y - LineH + Thickness / 2 - Overlap), SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y + ScreenSize.Y), Thickness, RenderColor, Outlined));
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y + ScreenSize.Y), SDK::FVector2D(ScreenPosition.X + LineW - Thickness / 2 + Overlap, ScreenPosition.Y + ScreenSize.Y), Thickness, RenderColor, Outlined));
|
||||
// Bottom-left corner horizontal and vertical
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X + Correction, ScreenPosition.Y + ScreenSize.Y), SDK::FVector2D(ScreenPosition.X + LineW, ScreenPosition.Y + ScreenSize.Y), Thickness, RenderColor, Outlined));
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y + ScreenSize.Y - LineH), SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y + ScreenSize.Y - Correction), Thickness, RenderColor, Outlined));
|
||||
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X + ScreenSize.X - LineW + Thickness / 2 - Overlap, ScreenPosition.Y + ScreenSize.Y), SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + ScreenSize.Y), Thickness, RenderColor, Outlined));
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + ScreenSize.Y - LineH + Thickness / 2 - Overlap), SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + ScreenSize.Y), Thickness, RenderColor, Outlined));
|
||||
// Bottom-right corner horizontal and vertical
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X + ScreenSize.X - LineW, ScreenPosition.Y + ScreenSize.Y), SDK::FVector2D(ScreenPosition.X + ScreenSize.X - Correction, ScreenPosition.Y + ScreenSize.Y), Thickness, RenderColor, Outlined));
|
||||
Cache->Lines.push_back(Drawing::LineCache(SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + ScreenSize.Y - LineH), SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + ScreenSize.Y - Correction), Thickness, RenderColor, Outlined));
|
||||
|
||||
DrawingQueue.push_back(std::move(Cache));
|
||||
}
|
||||
void Drawing::Triangle(SDK::FVector2D ScreenPositionA, SDK::FVector2D ScreenPositionB, SDK::FVector2D ScreenPositionC, float Thickness, SDK::FLinearColor RenderColor, bool Filled, bool Outlined) {
|
||||
std::lock_guard<std::mutex> Lock(DrawingMutex);
|
||||
auto Cache = std::make_unique<TriangleCache>(ScreenPositionA, ScreenPositionB, ScreenPositionC, Thickness, RenderColor, Filled, Outlined);
|
||||
DrawingQueue.push_back(std::move(Cache));
|
||||
}
|
||||
@@ -247,8 +286,8 @@ void Drawing::FilledRect(SDK::FVector2D ScreenPosition, SDK::FVector2D ScreenSiz
|
||||
}
|
||||
void Drawing::Rect(SDK::FVector2D ScreenPosition, SDK::FVector2D ScreenSize, float Thickness, SDK::FLinearColor RenderColor, bool Outlined) {
|
||||
if (Outlined) {
|
||||
SDK::GetLocalCanvas()->K2_DrawBox(ScreenPositionA, ScreenSize, Thickness + 1.f, SDK::FLinearColor(0.f, 0.f, 0.f, 1.f));
|
||||
SDK::GetLocalCanvas()->K2_DrawBox(ScreenPositionA, ScreenSize, Thickness - 1.f, SDK::FLinearColor(0.f, 0.f, 0.f, 1.f));
|
||||
SDK::GetLocalCanvas()->K2_DrawBox(ScreenPosition, ScreenSize, Thickness + 1.f, SDK::FLinearColor(0.f, 0.f, 0.f, 1.f));
|
||||
SDK::GetLocalCanvas()->K2_DrawBox(ScreenPosition, ScreenSize, Thickness - 1.f, SDK::FLinearColor(0.f, 0.f, 0.f, 1.f));
|
||||
}
|
||||
|
||||
SDK::GetLocalCanvas()->K2_DrawBox(ScreenPosition, ScreenSize, Thickness, RenderColor);
|
||||
@@ -257,14 +296,18 @@ void Drawing::CorneredRect(SDK::FVector2D ScreenPosition, SDK::FVector2D ScreenS
|
||||
float lineW = ScreenSize.X / 4;
|
||||
float lineH = ScreenSize.Y / 4;
|
||||
|
||||
Line(SDK::FVector2D(ScreenPositionA.X, ScreenPositionA.Y), SDK::FVector2D(ScreenPositionA.X + lineW, ScreenPositionA.Y), Thickness, RenderColor, Outlined);
|
||||
Line(SDK::FVector2D(ScreenPositionA.X, ScreenPositionA.Y), SDK::FVector2D(ScreenPositionA.X, ScreenPositionA.Y + lineH), Thickness, RenderColor, Outlined);
|
||||
Line(SDK::FVector2D(ScreenPositionA.X + ScreenSize.X, ScreenPositionA.Y), SDK::FVector2D(ScreenPositionA.X + ScreenSize.X, ScreenPositionA.Y + lineH), Thickness, RenderColor, Outlined);
|
||||
Line(SDK::FVector2D(ScreenPositionA.X + ScreenSize.X - lineW, ScreenPositionA.Y), SDK::FVector2D(ScreenPositionA.X + ScreenSize.X, ScreenPositionA.Y), Thickness, RenderColor, Outlined);
|
||||
Line(SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y), SDK::FVector2D(ScreenPosition.X + lineW, ScreenPosition.Y), Thickness, RenderColor, Outlined);
|
||||
Line(SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y), SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y + lineH), Thickness, RenderColor, Outlined);
|
||||
Line(SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y), SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + lineH), Thickness, RenderColor, Outlined);
|
||||
Line(SDK::FVector2D(ScreenPosition.X + ScreenSize.X - lineW, ScreenPosition.Y), SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y), Thickness, RenderColor, Outlined);
|
||||
|
||||
Line(SDK::FVector2D(ScreenPositionA.X, ScreenPositionA.Y + ScreenSize.Y), SDK::FVector2D(ScreenPositionA.X + lineW, ScreenPositionA.Y + ScreenSize.Y), Thickness, RenderColor, Outlined);
|
||||
Line(SDK::FVector2D(ScreenPositionA.X, ScreenPositionA.Y + ScreenSize.Y - lineH), SDK::FVector2D(ScreenPositionA.X, ScreenPositionA.Y + ScreenSize.Y), Thickness, RenderColor, Outlined);
|
||||
Line(SDK::FVector2D(ScreenPositionA.X + ScreenSize.X, ScreenPositionA.Y + ScreenSize.Y - lineH), SDK::FVector2D(ScreenPositionA.X + ScreenSize.X, ScreenPositionA.Y + ScreenSize.Y), Thickness, RenderColor, Outlined);
|
||||
Line(SDK::FVector2D(ScreenPositionA.X + ScreenSize.X - lineW, ScreenPositionA.Y + ScreenSize.Y), SDK::FVector2D(ScreenPositionA.X + ScreenSize.X, ScreenPositionA.Y + ScreenSize.Y), Thickness, RenderColor, Outlined);
|
||||
Line(SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y + ScreenSize.Y), SDK::FVector2D(ScreenPosition.X + lineW, ScreenPosition.Y + ScreenSize.Y), Thickness, RenderColor, Outlined);
|
||||
Line(SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y + ScreenSize.Y - lineH), SDK::FVector2D(ScreenPosition.X, ScreenPosition.Y + ScreenSize.Y), Thickness, RenderColor, Outlined);
|
||||
Line(SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + ScreenSize.Y - lineH), SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + ScreenSize.Y), Thickness, RenderColor, Outlined);
|
||||
Line(SDK::FVector2D(ScreenPosition.X + ScreenSize.X - lineW, ScreenPosition.Y + ScreenSize.Y), SDK::FVector2D(ScreenPosition.X + ScreenSize.X, ScreenPosition.Y + ScreenSize.Y), Thickness, RenderColor, Outlined);
|
||||
}
|
||||
void Drawing::Triangle(SDK::FVector2D ScreenPositionA, SDK::FVector2D ScreenPositionB, SDK::FVector2D ScreenPositionC, float Thickness, SDK::FLinearColor RenderColor, bool Filled, bool Outlined) {
|
||||
|
||||
}
|
||||
|
||||
#endif // _ENGINE
|
||||
@@ -2,6 +2,7 @@
|
||||
#ifdef _IMGUI
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#endif
|
||||
|
||||
#include "../Game/SDK/Classes/Basic.h"
|
||||
@@ -114,11 +115,14 @@ namespace Drawing {
|
||||
|
||||
|
||||
|
||||
inline std::mutex DrawingMutex;
|
||||
inline std::vector<std::unique_ptr<IDrawingCache>> RenderBuffer, DrawingQueue;
|
||||
#endif
|
||||
|
||||
#ifdef _IMGUI
|
||||
|
||||
|
||||
inline void SwapBuffers() {
|
||||
std::lock_guard<std::mutex> Lock(DrawingMutex);
|
||||
|
||||
std::swap(RenderBuffer, DrawingQueue);
|
||||
|
||||
DrawingQueue.clear();
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
// - Add WndProc as an option for Engine rendering
|
||||
// - Add proper outline for ImGui drawing
|
||||
// - Add batch-line support for ImGui and Engine line drawing (Drawing::BeginBatch, Drawing::EndBatch)
|
||||
// - Add RaycastMulti offset finding for UE5
|
||||
// - Add build through walls using RaycastMulti hook
|
||||
|
||||
#if UNLOAD_THREAD
|
||||
const Input::KeyName UnloadKey = Input::KeyName::F5;
|
||||
|
||||
@@ -360,6 +360,8 @@
|
||||
</ClCompile>
|
||||
<ClCompile Include="Game\Features\Exploits\Vehicle.cpp" />
|
||||
<ClCompile Include="Game\Features\Exploits\Weapon.cpp" />
|
||||
<ClCompile Include="Hooks\Callbacks\RaycastMulti.cpp" />
|
||||
<ClCompile Include="Utilities\Math.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="Configs\Config.h" />
|
||||
|
||||
@@ -128,6 +128,12 @@
|
||||
<ClCompile Include="Hooks\Callbacks\CalculateShot.cpp">
|
||||
<Filter>Hooks\Callbacks</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Utilities\Math.cpp">
|
||||
<Filter>Utilities</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Hooks\Callbacks\RaycastMulti.cpp">
|
||||
<Filter>Hooks\Callbacks</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="Game">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ShowAllFiles>false</ShowAllFiles>
|
||||
<ShowAllFiles>true</ShowAllFiles>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -14,6 +14,10 @@
|
||||
#include "../../Features/Exploits/Weapon.h"
|
||||
|
||||
#include "../../../Utilities/Math.h"
|
||||
#include "../../../Utilities/Logger.h"
|
||||
#include "../../Input/Input.h"
|
||||
|
||||
int num = 0;
|
||||
|
||||
void Actors::FortPawn::Tick() {
|
||||
bool SeenTarget = false;
|
||||
@@ -26,11 +30,57 @@ void Actors::FortPawn::Tick() {
|
||||
for (auto it = CachedPlayersLocal.begin(); it != CachedPlayersLocal.end(); ++it) {
|
||||
Actors::Caches::FortPawnCache& CurrentPlayer = *it;
|
||||
|
||||
SDK::AActor* Actor = CurrentPlayer.FortPawn; if (SDK::IsValidPointer(Actor) == false) continue;
|
||||
SDK::AFortPawn* FortPawn = reinterpret_cast<SDK::AFortPawn*>(Actor); if (SDK::IsValidPointer(FortPawn) == false) continue;
|
||||
SDK::AFortPlayerState* FortPlayerState = FortPawn->PlayerState(); //if (SDK::IsValidPointer(FortPlayerState) == false) continue;
|
||||
SDK::ACharacter* Character = static_cast<SDK::ACharacter*>((SDK::APawn*)FortPawn); if (SDK::IsValidPointer(Character) == false) continue;
|
||||
CurrentPlayer.Mesh = Character->Mesh(); if (SDK::IsValidPointer(CurrentPlayer.Mesh) == false) continue;
|
||||
SDK::AActor* Actor = CurrentPlayer.FortPawn; if (SDK::IsValidPointer(Actor) == false) continue;
|
||||
SDK::AFortPawn* FortPawn = reinterpret_cast<SDK::AFortPawn*>(Actor); if (SDK::IsValidPointer(FortPawn) == false) continue;
|
||||
SDK::AFortPlayerState* FortPlayerState = reinterpret_cast<SDK::AFortPlayerState*>(FortPawn->PlayerState()); //if (SDK::IsValidPointer(FortPlayerState) == false) continue;
|
||||
SDK::ACharacter* Character = reinterpret_cast<SDK::ACharacter*>(FortPawn); if (SDK::IsValidPointer(Character) == false) continue;
|
||||
CurrentPlayer.Mesh = Character->Mesh(); if (SDK::IsValidPointer(CurrentPlayer.Mesh) == false) continue;
|
||||
|
||||
int loop = 0;
|
||||
bool found = false;
|
||||
|
||||
#if 0
|
||||
for (int i = 0; i < SDK::UObject::ObjectArray.Num(); i++) {
|
||||
SDK::UObject* Object = SDK::UObject::ObjectArray.GetByIndex(i);
|
||||
if (Object == nullptr) continue;
|
||||
|
||||
if (Object->IsDefaultObject() == false && Object->IsA(SDK::UMaterialInterface::StaticClass())) {
|
||||
found = true;
|
||||
|
||||
loop++;
|
||||
|
||||
if (loop < num) {
|
||||
num++;
|
||||
continue;
|
||||
}
|
||||
|
||||
DEBUG_LOG(LOG_INFO, std::string(skCrypt("Material: ")) + Object->GetFullName());
|
||||
|
||||
num++;
|
||||
|
||||
SDK::UMaterialInstanceDynamic* MaterialInstanceDynamic = SDK::UKismetMaterialLibrary::StaticClass()->SDK::UKismetMaterialLibrary::CreateDynamicMaterialInstance(SDK::GetWorld(), reinterpret_cast<SDK::UMaterialInterface*>(Object), SDK::FName());
|
||||
DEBUG_LOG(LOG_INFO, std::string(skCrypt("Material Made! - ")) + std::to_string((uintptr_t)MaterialInstanceDynamic));
|
||||
if (MaterialInstanceDynamic) {
|
||||
//DEBUG_LOG(LOG_INFO, std::string(skCrypt("Material: ")) + Object->GetFullName());
|
||||
//test->SetScalarParameterValue(skCrypt("GlowAmount").decrypt(), 1.f);
|
||||
|
||||
SDK::TArray<SDK::UMaterialInterface*> Materials = CurrentPlayer.Mesh->GetMaterials();
|
||||
|
||||
for (int i2 = 0; i2 < Materials.Num(); i2++) {
|
||||
DEBUG_LOG(LOG_INFO, "Num Mats: " + std::to_string(Materials.Num()));
|
||||
|
||||
CurrentPlayer.Mesh->SetMaterial(i2, MaterialInstanceDynamic);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (found == false) {
|
||||
num = 0;
|
||||
}
|
||||
|
||||
// LocalPawn caching and exploit ticks
|
||||
if (FortPawn == SDK::GetLocalPawn()) {
|
||||
@@ -40,20 +90,36 @@ void Actors::FortPawn::Tick() {
|
||||
Features::Exploits::Vehicle::Tick();
|
||||
Features::Exploits::Weapon::Tick(FortPawn->CurrentWeapon());
|
||||
|
||||
if (SDK::GetLocalController()) {
|
||||
if (Config::Exploits::Player::InfiniteBuilds) {
|
||||
reinterpret_cast<SDK::AFortPlayerController*>(SDK::GetLocalController())->SetbBuildFree(true, &Config::Exploits::Player::InfiniteBuilds);
|
||||
{
|
||||
if (SDK::GetLocalController()) {
|
||||
if (Config::Exploits::Player::InfiniteBuilds) {
|
||||
reinterpret_cast<SDK::AFortPlayerController*>(SDK::GetLocalController())->SetbBuildFree(true, &Config::Exploits::Player::InfiniteBuilds);
|
||||
}
|
||||
|
||||
if (Config::Exploits::Player::InfiniteAmmo) {
|
||||
reinterpret_cast<SDK::AFortPlayerController*>(SDK::GetLocalController())->SetbInfiniteAmmo(true, &Config::Exploits::Player::InfiniteAmmo);
|
||||
}
|
||||
}
|
||||
|
||||
if (Config::Exploits::Player::InfiniteAmmo) {
|
||||
reinterpret_cast<SDK::AFortPlayerController*>(SDK::GetLocalController())->SetbInfiniteAmmo(true, &Config::Exploits::Player::InfiniteAmmo);
|
||||
if (Config::Exploits::Player::ADSWhileNotOnGround) {
|
||||
reinterpret_cast<SDK::AFortPlayerPawnAthena*>(FortPawn)->SetbADSWhileNotOnGround(true, &Config::Exploits::Player::ADSWhileNotOnGround);
|
||||
}
|
||||
}
|
||||
|
||||
if (Config::Exploits::Player::EditEnemyBuilds) {
|
||||
SDK::ABuildingActor* TargetedBuilding = reinterpret_cast<SDK::AFortPlayerController*>(SDK::GetLocalController())->TargetedBuilding();
|
||||
if (TargetedBuilding) {
|
||||
TargetedBuilding->SetTeamIndex(LocalPawnCache.TeamIndex, & Config::Exploits::Player::EditEnemyBuilds);
|
||||
if (Config::Exploits::Player::DoublePump) {
|
||||
FortPawn->CurrentWeapon()->SetbIgnoreTryToFireSlotCooldownRestriction(true, &Config::Exploits::Player::DoublePump);
|
||||
}
|
||||
|
||||
if (Config::Exploits::Player::AllowRedeploy) {
|
||||
if (SDK::GetWorld()->GameState()->IsA(SDK::AFortGameStateAthena::StaticClass())) {
|
||||
reinterpret_cast<SDK::AFortGameStateAthena*>(SDK::GetWorld()->GameState())->SetDefaultGliderRedeployCanRedeploy(true, &Config::Exploits::Player::AllowRedeploy);
|
||||
}
|
||||
}
|
||||
|
||||
if (Config::Exploits::Player::EditEnemyBuilds) {
|
||||
SDK::ABuildingActor* TargetedBuilding = reinterpret_cast<SDK::AFortPlayerController*>(SDK::GetLocalController())->TargetedBuilding();
|
||||
if (TargetedBuilding) {
|
||||
TargetedBuilding->SetTeamIndex(LocalPawnCache.TeamIndex, &Config::Exploits::Player::EditEnemyBuilds);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,7 +144,7 @@ void Actors::FortPawn::Tick() {
|
||||
CurrentPlayer.IsPlayerVisibleOnScreen = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CurrentPlayer.DistanceFromLocalPawn = LocalPawnCache.Position.Distance(CurrentPlayer.BonePositions3D[Features::FortPawnHelper::Bone::Root]) / 100.f;
|
||||
|
||||
// Hardcoded max distance, should move to bone population for optimisation
|
||||
@@ -98,16 +164,21 @@ void Actors::FortPawn::Tick() {
|
||||
SDK::FVector2D TopLeft, BottomRight;
|
||||
Features::FortPawnHelper::PopulateBoundCorners(CurrentPlayer, TopLeft, BottomRight);
|
||||
|
||||
float FontSize = Math::CalculateInterpolatedValue(CurrentPlayer.DistanceFromLocalPawn, 150.f, 10.f, 20.f);
|
||||
float FontSize = Math::CalculateInterpolatedValue(150.f, CurrentPlayer.DistanceFromLocalPawn, 12.f, 20.f);
|
||||
float PrimaryThicknessMultiplier = Math::CalculateInterpolatedValue(75.f, CurrentPlayer.DistanceFromLocalPawn, 1.f, 3.f);
|
||||
float SecondaryThicknessMultiplier = Math::CalculateInterpolatedValue(75.f, CurrentPlayer.DistanceFromLocalPawn, 1.f, 2.f);
|
||||
|
||||
float PrimaryThickness = 1.f * PrimaryThicknessMultiplier;
|
||||
float SecondaryThickness = 1.f * SecondaryThicknessMultiplier;
|
||||
|
||||
SDK::FLinearColor Color = SDK::FLinearColor(1.f, 1.f, 1.f, 1.f);
|
||||
SDK::FLinearColor PrimaryColor = SDK::FLinearColor(1.f, 1.f, 1.f, 1.f);
|
||||
if (CurrentPlayer.IsAnyBoneVisible) {
|
||||
Color = SDK::FLinearColor(1.f, 0.f, 0.f, 1.f);
|
||||
PrimaryColor = SDK::FLinearColor(1.f, 0.f, 0.f, 1.f);
|
||||
}
|
||||
|
||||
SDK::FLinearColor SecondaryColor = SDK::FLinearColor(1.0f, 0.f, 0.f, 1.0f);
|
||||
if (CurrentPlayer.IsAnyBoneVisible) {
|
||||
SecondaryColor = SDK::FLinearColor(0.0f, 1.f, 1.f, 1.0f);
|
||||
}
|
||||
|
||||
if (CurrentPlayer.IsPlayerVisibleOnScreen){
|
||||
@@ -141,21 +212,55 @@ void Actors::FortPawn::Tick() {
|
||||
SDK::FVector2D(ScreenPos[0].X, ScreenPos[0].Y),
|
||||
SDK::FVector2D(ScreenPos[1].X, ScreenPos[1].Y),
|
||||
SecondaryThicknessMultiplier,
|
||||
BoneVisibleToPlayer ? SDK::FLinearColor(0.0f, 1.f, 1.f, 1.0f) : SDK::FLinearColor(1.0f, 0.f, 0.f, 1.0f),
|
||||
Config::Visuals::Players::IndividualBoneVisibilities ? BoneVisibleToPlayer ? SDK::FLinearColor(0.0f, 1.f, 1.f, 1.0f) : SDK::FLinearColor(1.0f, 0.f, 0.f, 1.0f) : SecondaryColor,
|
||||
false
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (Config::Visuals::Players::Box) {
|
||||
Drawing::CorneredRect(TopLeft, SDK::FVector2D(BottomRight - TopLeft), PrimaryThickness, Color, true);
|
||||
switch (Config::Visuals::Players::BoxType) {
|
||||
case ConfigTypes::BoxType::Full3D:
|
||||
// ADD THIS LATER
|
||||
break;
|
||||
case ConfigTypes::BoxType::Cornered3D:
|
||||
// ADD THIS LATER
|
||||
break;
|
||||
case ConfigTypes::BoxType::Full2D:
|
||||
Drawing::Rect(TopLeft, SDK::FVector2D(BottomRight - TopLeft), PrimaryThickness, PrimaryColor, true);
|
||||
break;
|
||||
case ConfigTypes::BoxType::Cornered2D:
|
||||
Drawing::CorneredRect(TopLeft, SDK::FVector2D(BottomRight - TopLeft), PrimaryThickness, PrimaryColor, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (Config::Visuals::Players::Name) {
|
||||
SDK::FVector2D PlayerNameTextSize = Drawing::TextSize(CurrentPlayer.PlayerName.ToString().c_str(), FontSize);
|
||||
SDK::FVector2D PlayerNameTextPos = SDK::FVector2D(TopLeft.X + (BottomRight.X - TopLeft.X) / 2 - PlayerNameTextSize.X / 2, TopLeft.Y - PlayerNameTextSize.Y - 2.f);
|
||||
// Text position at the top of the box
|
||||
SDK::FVector2D PlayerNameTextPos = SDK::FVector2D(TopLeft.X + (BottomRight.X - TopLeft.X) / 2, TopLeft.Y - FontSize - 2);
|
||||
|
||||
Drawing::Text(CurrentPlayer.PlayerName.ToString().c_str(), PlayerNameTextPos, FontSize, Color, true, false, true);
|
||||
Drawing::Text(CurrentPlayer.PlayerName.ToString().c_str(), PlayerNameTextPos, FontSize, PrimaryColor, true, false, true);
|
||||
}
|
||||
|
||||
if (Config::Visuals::Players::Distance) {
|
||||
// Text position at the bottom of the box
|
||||
SDK::FVector2D PlayerDistanceTextPos = SDK::FVector2D(TopLeft.X + (BottomRight.X - TopLeft.X) / 2, BottomRight.Y + 2);
|
||||
|
||||
// Cast to int to remove decimal places
|
||||
std::string DistanceString = skCrypt("[ ").decrypt() + std::to_string((int)CurrentPlayer.DistanceFromLocalPawn) + skCrypt(" m ]").decrypt();
|
||||
Drawing::Text(DistanceString.c_str(), PlayerDistanceTextPos, FontSize, PrimaryColor, true, false, true);
|
||||
}
|
||||
|
||||
if (Config::Visuals::Players::CurrentWeapon) {
|
||||
//SDK::AFortWeapon* CurrentWeapon = FortPawn->CurrentWeapon();
|
||||
//if (CurrentWeapon) {
|
||||
// std::string WeaponName = CurrentWeapon->WeaponData()->DisplayName().ToString();
|
||||
|
||||
// SDK::FVector2D WeaponTextPos = SDK::FVector2D(TopLeft.X + (BottomRight.X - TopLeft.X) / 2, BottomRight.Y);
|
||||
// WeaponTextPos.Y += Config::Visuals::Players::Distance ? FontSize + 1 : 0;
|
||||
|
||||
// Drawing::Text(WeaponName.c_str(), WeaponTextPos, FontSize, CurrentWeapon->WeaponData()->GetRarityColor(), true, false, true);
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,34 +38,7 @@ void Actors::FortWeapon::Tick() {
|
||||
if (WeaponName.Data && WeaponName.Data->Name && WeaponName.Data->Length > 0) {
|
||||
SDK::EFortItemTier Rarity = FortItemDefinition->Tier();
|
||||
|
||||
SDK::FLinearColor WeaponColor(0.74f, 0.74f, 0.71f, 1.0f);
|
||||
|
||||
switch (Rarity) {
|
||||
case SDK::EFortItemTier::I:
|
||||
WeaponColor = SDK::FLinearColor(0.74f, 0.74f, 0.71f, 1.0f); // Set color for Common rarity
|
||||
break;
|
||||
case SDK::EFortItemTier::II:
|
||||
WeaponColor = SDK::FLinearColor(0.12f, 0.87f, 0.11f, 1.0f); // Set color for Uncommon rarity
|
||||
break;
|
||||
case SDK::EFortItemTier::III:
|
||||
WeaponColor = SDK::FLinearColor(0.29f, 0.33f, 0.95f, 1.0f); // Set color for Rare rarity
|
||||
break;
|
||||
case SDK::EFortItemTier::IV:
|
||||
WeaponColor = SDK::FLinearColor(0.65f, 0.27f, 0.82f, 1.0f); // Set color for Epic rarity
|
||||
break;
|
||||
case SDK::EFortItemTier::V:
|
||||
WeaponColor = SDK::FLinearColor(0.95f, 0.40f, 0.07f, 1.0f); // Set color for Legendary rarity
|
||||
break;
|
||||
case SDK::EFortItemTier::VI:
|
||||
WeaponColor = SDK::FLinearColor(0.98f, 0.85f, 0.29f, 1.0f); // Set color for Mythic rarity
|
||||
break;
|
||||
case SDK::EFortItemTier::VII:
|
||||
WeaponColor = SDK::FLinearColor(0.47f, 1.0f, 0.96f, 1.0f); // Set color for Transcendent rarity
|
||||
break;
|
||||
default:
|
||||
WeaponColor = SDK::FLinearColor(0.74f, 0.74f, 0.71f, 1.0f); // Set color for Default rarity
|
||||
break;
|
||||
}
|
||||
SDK::FLinearColor WeaponColor = FortItemDefinition->GetRarityColor();
|
||||
|
||||
Drawing::Text(WeaponName.ToString().c_str(), Project, 16.f, WeaponColor, true, true, true);
|
||||
}
|
||||
|
||||
@@ -25,7 +25,40 @@ void Features::Aimbot::AimbotTarget(Target& TargetToAimot) {
|
||||
|
||||
void Features::Aimbot::CalculateShotCallback(SDK::FTransform* BulletTransform) {
|
||||
if (Config::Aimbot::BulletTP && Actors::MainTarget.GlobalInfo.TargetActor) {
|
||||
BulletTransform->Translation = Actors::MainTarget.GlobalInfo.TargetBonePosition;
|
||||
SDK::FVector Position = Actors::MainTarget.GlobalInfo.TargetBonePosition;
|
||||
Position.Z += 10.f; // Add 0.01 meters to the Z axis to make sue it always hits the correct bone
|
||||
|
||||
BulletTransform->Translation = Position;
|
||||
}
|
||||
}
|
||||
|
||||
void Features::Aimbot::RaycastMultiCallback(SDK::UWorld* World, SDK::TArray<SDK::FHitResult>& OutHits, SDK::ECollisionChannel TraceChannel) {
|
||||
if (Actors::MainTarget.GlobalInfo.TargetActor && Config::Aimbot::BulletTPV2) {
|
||||
if (TraceChannel != SDK::ECollisionChannel::ECC_GameTraceChannel7) return; // Only modify the line trace for the bullet
|
||||
|
||||
DEBUG_LOG(LOG_INFO, std::string(skCrypt("RaycastMultiCallback - ")) + std::to_string((int)TraceChannel));
|
||||
|
||||
for (int i = 0; i < OutHits.Num(); i++) {
|
||||
SDK::FHitResult OutHit = OutHits[i];
|
||||
|
||||
// Prepare data for our own line trace
|
||||
SDK::TArray<SDK::AActor*> ActorsToIgnore;
|
||||
SDK::FVector Position = Actors::MainTarget.GlobalInfo.TargetBonePosition;
|
||||
Position.Z += 50.f;
|
||||
|
||||
// Save the original start position of the RaycastMulti
|
||||
SDK::FVector OriginalStart = OutHits[i].TraceStart();
|
||||
|
||||
// Run our own line trace that is guaranteed to hit the target bone
|
||||
SDK::UKismetSystemLibrary::LineTraceSingle(World, Position, Actors::MainTarget.GlobalInfo.TargetBonePosition, (SDK::ETraceTypeQuery)TraceChannel, true, ActorsToIgnore, SDK::EDrawDebugTrace::None, OutHit, false, SDK::FLinearColor(), SDK::FLinearColor(), 0.f);
|
||||
|
||||
// Revert some data back to the original RaycastMulti (to avoid some possible detections)
|
||||
OutHit.SetTraceStart(OriginalStart);
|
||||
OutHit.SetDistance(OriginalStart.Distance(Actors::MainTarget.GlobalInfo.TargetBonePosition));
|
||||
|
||||
// Set the new hit result
|
||||
OutHits[i] = OutHit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +72,7 @@ void Features::Aimbot::GetViewpointCallback(SDK::FMinimalViewInfo* OutViewInfo)
|
||||
}
|
||||
}
|
||||
|
||||
void Features::Aimbot::GetPlayerViewpointCallback(SDK::FRotator* Rotation) {
|
||||
void Features::Aimbot::GetPlayerViewpointCallback(SDK::FVector* Location, SDK::FRotator* Rotation) {
|
||||
if (Config::Aimbot::SilentAim == false) return;
|
||||
if (Actors::MainTarget.LocalInfo.IsTargeting == false && Config::Aimbot::UseAimKeyForSilent) return;
|
||||
|
||||
|
||||
@@ -13,12 +13,21 @@ namespace Features {
|
||||
void AimbotTarget(Aimbot::Target& TargetToAimot);
|
||||
|
||||
/*
|
||||
* @brief Callback for the CalculateShot hook (used for silent aim and bullet TP)
|
||||
* @brief Callback for the CalculateShot hook (used for silent aim and bullet TP V1)
|
||||
*
|
||||
* @param ShotTransform The bullet transform
|
||||
*/
|
||||
void CalculateShotCallback(SDK::FTransform* BulletTransform);
|
||||
|
||||
/*
|
||||
* @brief Callback for the RaycastMulti hook (used for bullet TP V2)
|
||||
*
|
||||
* @param World The world (from the RaycastMulti hook)
|
||||
* @param OutHits The hit results (from the RaycastMulti hook)
|
||||
* @param TraceChannel The trace channel (from the RaycastMulti hook)
|
||||
*/
|
||||
void RaycastMultiCallback(SDK::UWorld* World, SDK::TArray<SDK::FHitResult>& OutHits, SDK::ECollisionChannel TraceChannel);
|
||||
|
||||
/*
|
||||
* @brief Callback for the GetViewpoint hook (used for silent aim)
|
||||
*
|
||||
@@ -29,8 +38,9 @@ namespace Features {
|
||||
/*
|
||||
* @brief Callback for the GetPlayerViewpoint hook (used for silent aim)
|
||||
*
|
||||
* @param this_ The player controller
|
||||
* @param Location The location of the camera
|
||||
* @param Rotation The rotation of the camera
|
||||
*/
|
||||
void GetPlayerViewpointCallback(SDK::FRotator* Rotation);
|
||||
void GetPlayerViewpointCallback(SDK::FVector* Location, SDK::FRotator* Rotation);
|
||||
};
|
||||
}
|
||||
@@ -5,6 +5,8 @@
|
||||
|
||||
#include "../FortPawnHelper/Bone.h"
|
||||
|
||||
#include "../../Game.h"
|
||||
|
||||
void Features::Aimbot::Target::UpdateLocalInfoAndType(Target& TargetToUpdate) {
|
||||
switch (TargetToUpdate.GlobalInfo.Type) {
|
||||
case TargetType::ClosePlayer:
|
||||
|
||||
@@ -10,8 +10,9 @@
|
||||
#include "../../Input/Input.h"
|
||||
|
||||
void Features::Exploits::Vehicle::Tick() {
|
||||
SDK::AFortAthenaVehicle* Vehicle = reinterpret_cast<SDK::AFortPawn*>(SDK::GetLocalPawn())->GetVehicle();
|
||||
if (Vehicle) {
|
||||
SDK::AFortAthenaVehicle* Vehicle = reinterpret_cast<SDK::AFortPlayerPawn*>(SDK::GetLocalPawn())->GetVehicle();
|
||||
|
||||
if (SDK::IsValidPointer(Vehicle)) {
|
||||
VehicleLastTick = Vehicle;
|
||||
|
||||
if (Config::Exploits::Vehicle::InfiniteBoost) {
|
||||
|
||||
@@ -44,6 +44,9 @@ void Game::MenuCallback() {
|
||||
RaaxGUI::Checkbox(skCrypt("Show Aim Line"), &Config::Aimbot::ShowAimLine);
|
||||
RaaxGUI::Checkbox(skCrypt("Show FOV"), &Config::Aimbot::ShowFOV);
|
||||
|
||||
RaaxGUI::Checkbox(skCrypt("Sticky Aim"), &Config::Aimbot::StickyAim);
|
||||
RaaxGUI::Checkbox(skCrypt("Visible Check"), &Config::Aimbot::VisibleCheck);
|
||||
|
||||
RaaxGUI::Checkbox(skCrypt("Standard"), &Config::Aimbot::Standard::Enabled);
|
||||
if (Config::Aimbot::Standard::Enabled) {
|
||||
RaaxGUI::SliderInt(skCrypt("Standard FOV"), &Config::Aimbot::Standard::FOV, 0, 180);
|
||||
@@ -201,7 +204,10 @@ void Game::MenuCallback() {
|
||||
}
|
||||
|
||||
if (SDK::Cached::Functions::CalculateShot) {
|
||||
ImGui::Checkbox(skCrypt("Bullet TP"), &Config::Aimbot::BulletTP);
|
||||
ImGui::Checkbox(skCrypt("Bullet TP V1 (CalculateShot)"), &Config::Aimbot::BulletTP);
|
||||
}
|
||||
if (SDK::Cached::Functions::RaycastMulti) {
|
||||
ImGui::Checkbox(skCrypt("Bullet TP V2 (RaycastMulti)"), &Config::Aimbot::BulletTPV2);
|
||||
}
|
||||
|
||||
ImGui::Checkbox(skCrypt("Silent Aim"), &Config::Aimbot::SilentAim);
|
||||
@@ -243,7 +249,16 @@ void Game::MenuCallback() {
|
||||
ImGui::Checkbox(skCrypt("Player ESP"), &Config::Visuals::Players::Enabled);
|
||||
if (Config::Visuals::Players::Enabled) {
|
||||
ImGui::Checkbox(skCrypt("Box"), &Config::Visuals::Players::Box);
|
||||
|
||||
if (Config::Visuals::Players::Box) {
|
||||
// Fix skCrypter messing up the strings here
|
||||
const char* Items[] = { skCrypt("3D Full").decrypt(), skCrypt("3D Cornered").decrypt(), skCrypt("2D Full").decrypt(), skCrypt("2D Cornered").decrypt() };
|
||||
ImGui::Combo(skCrypt("Box Type").decrypt(), (int*)&Config::Visuals::Players::BoxType, Items, 4);
|
||||
}
|
||||
|
||||
ImGui::Checkbox(skCrypt("Skeleton"), &Config::Visuals::Players::Skeleton);
|
||||
ImGui::Checkbox(skCrypt("Display Individual Bone Visibilities"), &Config::Visuals::Players::IndividualBoneVisibilities);
|
||||
|
||||
ImGui::Checkbox(skCrypt("Distance"), &Config::Visuals::Players::Distance);
|
||||
ImGui::Checkbox(skCrypt("Name"), &Config::Visuals::Players::Name);
|
||||
|
||||
@@ -288,9 +303,15 @@ void Game::MenuCallback() {
|
||||
switch (SubTab) {
|
||||
case 0:
|
||||
{
|
||||
ImGui::Checkbox(skCrypt("Edit Enemy Builds"), &Config::Exploits::Player::EditEnemyBuilds);
|
||||
|
||||
ImGui::Checkbox(skCrypt("ADS While Not On Ground"), &Config::Exploits::Player::ADSWhileNotOnGround);
|
||||
ImGui::Checkbox(skCrypt("Double Pump"), &Config::Exploits::Player::DoublePump);
|
||||
|
||||
ImGui::Checkbox(skCrypt("Allow Redeploy (client sided 99% of the time)"), &Config::Exploits::Player::AllowRedeploy);
|
||||
|
||||
ImGui::Checkbox(skCrypt("Infinite Builds (client sided 99% of the time)"), &Config::Exploits::Player::InfiniteBuilds);
|
||||
ImGui::Checkbox(skCrypt("Infinite Ammo (client sided 99% of the time)"), &Config::Exploits::Player::InfiniteAmmo);
|
||||
ImGui::Checkbox(skCrypt("Edit Enemy Builds"), &Config::Exploits::Player::EditEnemyBuilds);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
|
||||
@@ -11,13 +11,4 @@ bool SDK::FVector::Normalize(float Tolerance) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
SDK::FVector SDK::FRotator::Vector() const {
|
||||
float CP, SP, CY, SY;
|
||||
Math::SinCos(&SP, &CP, Math::DegreesToRadians(Pitch));
|
||||
Math::SinCos(&SY, &CY, Math::DegreesToRadians(Yaw));
|
||||
FVector V = FVector(CP * CY, CP * SY, SP);
|
||||
|
||||
return V;
|
||||
}
|
||||
@@ -592,8 +592,6 @@ namespace SDK {
|
||||
}
|
||||
return delta;
|
||||
}
|
||||
|
||||
inline FVector Vector() const;
|
||||
};
|
||||
|
||||
struct FVector2D
|
||||
|
||||
@@ -105,7 +105,6 @@ namespace SDK {
|
||||
}
|
||||
|
||||
|
||||
|
||||
void UObject::SetupObjects(std::vector<FunctionSearch>& Functions, std::vector<OffsetSearch>& Offsets) {
|
||||
DEBUG_LOG(LOG_OFFSET, std::string(skCrypt("Setting up objects...")));
|
||||
|
||||
@@ -152,11 +151,11 @@ namespace SDK {
|
||||
SDK::FField* ChildProperty = ObjectStruct->ChildProperties();
|
||||
while (ChildProperty) {
|
||||
if (ChildProperty->Name.ToString() == Offset.PropertyName) {
|
||||
if (Offset.Offset != nullptr && *Offset.Offset == 0x0 && ChildProperty->HasTypeFlag(SDK::EClassCastFlags::Property)) {
|
||||
if (Offset.Offset != nullptr && (*Offset.Offset == -0x1 || *Offset.Offset == 0x0) && ChildProperty->HasTypeFlag(SDK::EClassCastFlags::Property)) {
|
||||
*Offset.Offset = ((SDK::FProperty*)ChildProperty)->Offset;
|
||||
}
|
||||
|
||||
if (Offset.Mask != nullptr && *Offset.Mask == 0x0 && ChildProperty->HasTypeFlag(SDK::EClassCastFlags::BoolProperty)) {
|
||||
if (Offset.Mask != nullptr && (*Offset.Mask == -0x1 || *Offset.Mask == 0x0) && ChildProperty->HasTypeFlag(SDK::EClassCastFlags::BoolProperty)) {
|
||||
*Offset.Mask = ((SDK::FBoolProperty*)ChildProperty)->FieldMask;
|
||||
}
|
||||
|
||||
@@ -171,11 +170,11 @@ namespace SDK {
|
||||
SDK::UField* Child = ObjectStruct->Children();
|
||||
while (Child) {
|
||||
if (Child->Name.ToString() == Offset.PropertyName) {
|
||||
if (Offset.Offset != nullptr && *Offset.Offset == 0x0 && Child->HasTypeFlag(SDK::EClassCastFlags::Property)) {
|
||||
if (Offset.Offset != nullptr && (*Offset.Offset == -0x1 || *Offset.Offset == 0x0) && Child->HasTypeFlag(SDK::EClassCastFlags::Property)) {
|
||||
*Offset.Offset = GetPropertyOffset((SDK::UProperty*)Child);
|
||||
}
|
||||
|
||||
if (Offset.Mask != nullptr && *Offset.Mask == 0x0 && Child->HasTypeFlag(SDK::EClassCastFlags::BoolProperty)) {
|
||||
if (Offset.Mask != nullptr && (*Offset.Mask == -0x1 || *Offset.Mask == 0x0) && Child->HasTypeFlag(SDK::EClassCastFlags::BoolProperty)) {
|
||||
*Offset.Mask = ((SDK::UBoolProperty*)Child)->ByteMask();
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,23 @@ void SDK::USceneComponent::SetPhysicsLinearVelocity(FVector NewVel, bool bAddToC
|
||||
return;
|
||||
}
|
||||
|
||||
void SDK::UPrimitiveComponent::SetMaterial(int32 ElementIndex, UMaterialInterface* Material) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
|
||||
struct {
|
||||
int32 ElementIndex;
|
||||
uint8 Pad_677[0x4];
|
||||
UMaterialInterface* Material;
|
||||
} params_SetMaterial{};
|
||||
|
||||
params_SetMaterial.ElementIndex = ElementIndex;
|
||||
params_SetMaterial.Material = Material;
|
||||
|
||||
this->ProcessEvent(SDK::Cached::Functions::PrimitiveComponent::SetMaterial, ¶ms_SetMaterial);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void SDK::UMovementComponent::StopMovementImmediately() {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
|
||||
@@ -112,6 +129,18 @@ void SDK::AActor::SetActorEnableCollision(bool bNewActorEnableCollision) {
|
||||
return;
|
||||
}
|
||||
|
||||
SDK::TArray<SDK::UMaterialInterface*> SDK::UMeshComponent::GetMaterials() {
|
||||
if (SDK::IsValidPointer(this) == false) return TArray<UMaterialInterface*>{};
|
||||
|
||||
struct {
|
||||
TArray<UMaterialInterface*> return_value;
|
||||
} params_GetMaterials{};
|
||||
|
||||
this->ProcessEvent(SDK::Cached::Functions::MeshComponent::GetMaterials, ¶ms_GetMaterials);
|
||||
|
||||
return params_GetMaterials.return_value;
|
||||
}
|
||||
|
||||
SDK::FName SDK::USkeletalMeshComponent::GetBoneName(int32 BoneIndex) {
|
||||
if (SDK::IsValidPointer(this) == false) return FName{};
|
||||
|
||||
@@ -370,7 +399,7 @@ bool SDK::UKismetSystemLibrary::LineTraceSingle(class UObject* WorldContextObjec
|
||||
bool bTraceComplex,
|
||||
TArray<class AActor*>& ActorsToIgnore,
|
||||
EDrawDebugTrace DrawDebugType,
|
||||
FHitResult OutHit,
|
||||
FHitResult& OutHit,
|
||||
bool bIgnoreSelf,
|
||||
FLinearColor& TraceColor,
|
||||
FLinearColor& TraceHitColor,
|
||||
@@ -386,7 +415,7 @@ bool SDK::UKismetSystemLibrary::LineTraceSingle(class UObject* WorldContextObjec
|
||||
|
||||
SDK::FLinearColor EmptyColor = SDK::FLinearColor();
|
||||
|
||||
return OriginalLineTraceSingle(WorldContextObject, StartCopy, EndCopy, TraceChannel, bTraceComplex, ActorsToIgnore, EDrawDebugTrace::None, {}, bIgnoreSelf, EmptyColor, EmptyColor, 0.f);
|
||||
return OriginalLineTraceSingle(WorldContextObject, StartCopy, EndCopy, TraceChannel, bTraceComplex, ActorsToIgnore, EDrawDebugTrace::None, OutHit, bIgnoreSelf, EmptyColor, EmptyColor, 0.f);
|
||||
}
|
||||
SDK::UClass* SDK::UKismetSystemLibrary::StaticClass() {
|
||||
static class UClass* Clss = nullptr;
|
||||
@@ -397,6 +426,34 @@ SDK::UClass* SDK::UKismetSystemLibrary::StaticClass() {
|
||||
return Clss;
|
||||
}
|
||||
|
||||
SDK::UMaterialInstanceDynamic* SDK::UKismetMaterialLibrary::CreateDynamicMaterialInstance(class UObject* WorldContextObject, class UMaterialInterface* Parent, class FName OptionalName) {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
|
||||
struct {
|
||||
class UObject* WorldContextObject;
|
||||
class UMaterialInterface* Parent;
|
||||
class FName OptionalName;
|
||||
|
||||
class UMaterialInstanceDynamic* return_value;
|
||||
} params_CreateDynamicMaterialInstance{};
|
||||
|
||||
params_CreateDynamicMaterialInstance.WorldContextObject = WorldContextObject;
|
||||
params_CreateDynamicMaterialInstance.Parent = Parent;
|
||||
params_CreateDynamicMaterialInstance.OptionalName = OptionalName;
|
||||
|
||||
this->ProcessEvent(SDK::Cached::Functions::KismetMaterialLibrary::CreateDynamicMaterialInstance, ¶ms_CreateDynamicMaterialInstance);
|
||||
|
||||
return params_CreateDynamicMaterialInstance.return_value;
|
||||
}
|
||||
SDK::UKismetMaterialLibrary* SDK::UKismetMaterialLibrary::StaticClass() {
|
||||
static class UClass* Clss = nullptr;
|
||||
|
||||
if (!Clss)
|
||||
Clss = UObject::FindClassFast(std::string(skCrypt("KismetMaterialLibrary")));
|
||||
|
||||
return reinterpret_cast<UKismetMaterialLibrary*>(Clss);
|
||||
}
|
||||
|
||||
SDK::FVector SDK::UKismetMathLibrary::GetForwardVector(const FRotator& InRot) {
|
||||
if (SDK::IsValidPointer(this) == false) return FVector{};
|
||||
|
||||
@@ -444,6 +501,27 @@ SDK::FRotator SDK::UKismetMathLibrary::FindLookAtRotation(struct FVector Start,
|
||||
|
||||
return params_FindLookAtRotation.return_value;
|
||||
}
|
||||
int32 SDK::UKismetMathLibrary::FMod(float Dividend, float Divisor, float* Remainder) {
|
||||
if (SDK::IsValidPointer(this) == false) return 0;
|
||||
|
||||
struct {
|
||||
float Dividend;
|
||||
float Divisor;
|
||||
float Remainder;
|
||||
int32 return_value;
|
||||
} params_FMod{};
|
||||
|
||||
params_FMod.Dividend = Dividend;
|
||||
params_FMod.Divisor = Divisor;
|
||||
params_FMod.Remainder = *Remainder;
|
||||
|
||||
this->ProcessEvent(SDK::Cached::Functions::KismetMathLibrary::FMod, ¶ms_FMod);
|
||||
|
||||
*Remainder = params_FMod.Remainder;
|
||||
|
||||
return params_FMod.return_value;
|
||||
|
||||
}
|
||||
SDK::UKismetMathLibrary* SDK::UKismetMathLibrary::StaticClass() {
|
||||
static class UClass* Clss = nullptr;
|
||||
|
||||
@@ -608,6 +686,15 @@ void SDK::UCanvas::K2_DrawBox(FVector2D ScreenPosition, FVector2D ScreenSize, fl
|
||||
this->ProcessEvent(SDK::Cached::Functions::Canvas::K2_DrawBox, ¶ms_K2_DrawBox);
|
||||
}
|
||||
|
||||
SDK::UClass* SDK::UMaterialInterface::StaticClass() {
|
||||
static class UClass* Clss = nullptr;
|
||||
|
||||
if (!Clss)
|
||||
Clss = UObject::FindClassFast(std::string(skCrypt("MaterialInterface")));
|
||||
|
||||
return Clss;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Wrapper Functions
|
||||
@@ -648,9 +735,6 @@ bool SDK::IsPositionVisible(SDK::UObject* WorldContextObj, FVector CameraPositio
|
||||
if (ActorToIgnore) IgnoredActors.Add(ActorToIgnore);
|
||||
if (ActorToIgnore2) IgnoredActors.Add(ActorToIgnore2);
|
||||
|
||||
Hit.TraceStart = CameraPosition;
|
||||
Hit.TraceEnd = TargetPosition;
|
||||
|
||||
bool bHitSomething = SDK::UKismetSystemLibrary::LineTraceSingle(
|
||||
WorldContextObj,
|
||||
CameraPosition,
|
||||
|
||||
@@ -17,12 +17,26 @@ typedef unsigned __int64 uint64;
|
||||
namespace SDK {
|
||||
// Classes
|
||||
|
||||
class UMaterial : public UObject {
|
||||
public:
|
||||
|
||||
};
|
||||
class UMaterialInterface : public UObject {
|
||||
public:
|
||||
// STATIC FUNCTIONS
|
||||
|
||||
static UClass* StaticClass();
|
||||
};
|
||||
class UMaterialInstanceDynamic : public UMaterialInterface {
|
||||
public:
|
||||
|
||||
};
|
||||
class USceneComponent : public UObject {
|
||||
public:
|
||||
// VALUES
|
||||
|
||||
FVector GetPosition() {
|
||||
if (SDK::IsValidPointer(this) == false) return FVector{};
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::SceneComponent::RelativeLocation == -0x1) return FVector{};
|
||||
return *(FVector*)((uintptr_t)this + SDK::Cached::Offsets::SceneComponent::RelativeLocation);
|
||||
}
|
||||
|
||||
@@ -32,6 +46,12 @@ namespace SDK {
|
||||
|
||||
void SetPhysicsLinearVelocity(FVector NewVel, bool bAddToCurrent, FName BoneName);
|
||||
};
|
||||
class UPrimitiveComponent : public USceneComponent {
|
||||
public:
|
||||
// FUNCTIONS
|
||||
|
||||
void SetMaterial(int32 ElementIndex, UMaterialInterface* Material);
|
||||
};
|
||||
class UMovementComponent : public UObject {
|
||||
public:
|
||||
// FUNCTIONS
|
||||
@@ -47,7 +67,7 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
USceneComponent* GetRootComponent() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::Actor::RootComponent == -0x1) return nullptr;
|
||||
return (USceneComponent*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::Actor::RootComponent));
|
||||
}
|
||||
|
||||
@@ -62,7 +82,13 @@ namespace SDK {
|
||||
|
||||
void SetActorEnableCollision(bool bNewActorEnableCollision);
|
||||
};
|
||||
class USkeletalMeshComponent : public UObject {
|
||||
class UMeshComponent : public UPrimitiveComponent {
|
||||
public:
|
||||
// FUNCTIONS
|
||||
|
||||
TArray<UMaterialInterface*> GetMaterials();
|
||||
};
|
||||
class USkeletalMeshComponent : public UMeshComponent {
|
||||
public:
|
||||
// FUNCTIONS
|
||||
|
||||
@@ -76,8 +102,25 @@ namespace SDK {
|
||||
|
||||
FVector GetBonePosition(uint8_t BoneID);
|
||||
};
|
||||
class APlayerState : public AActor {
|
||||
public:
|
||||
// FUNCTIONS
|
||||
|
||||
FString GetPlayerName();
|
||||
};
|
||||
class APawn : public AActor {
|
||||
public:
|
||||
// VALUES
|
||||
|
||||
APlayerState* PlayerState() {
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::Pawn::PlayerState == -0x1) return nullptr;
|
||||
return (APlayerState*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::Pawn::PlayerState));
|
||||
}
|
||||
|
||||
|
||||
|
||||
// FUNCTIONS
|
||||
|
||||
UPawnMovementComponent* GetMovementComponent();
|
||||
};
|
||||
class ACharacter : public APawn {
|
||||
@@ -85,16 +128,10 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
USkeletalMeshComponent* Mesh() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::Character::Mesh == -0x1) return nullptr;
|
||||
return (USkeletalMeshComponent*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::Character::Mesh));
|
||||
}
|
||||
};
|
||||
class APlayerState : public AActor {
|
||||
public:
|
||||
// FUNCTIONS
|
||||
|
||||
FString GetPlayerName();
|
||||
};
|
||||
class APlayerCameraManager : public UObject {
|
||||
public:
|
||||
// FUNCTIONS
|
||||
@@ -110,12 +147,12 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
APawn* AcknowledgedPawn() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::PlayerController::AcknowledgedPawn == -0x1) return nullptr;
|
||||
return (APawn*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::PlayerController::AcknowledgedPawn));
|
||||
}
|
||||
|
||||
APlayerCameraManager* PlayerCameraManager() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::PlayerController::PlayerCameraManager == -0x1) return nullptr;
|
||||
return (APlayerCameraManager*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::PlayerController::PlayerCameraManager));
|
||||
}
|
||||
|
||||
@@ -146,7 +183,7 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
APlayerController* PlayerController() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::Player::PlayerController == -0x1) return nullptr;
|
||||
return (APlayerController*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::Player::PlayerController));
|
||||
}
|
||||
};
|
||||
@@ -159,25 +196,34 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
TArray<ULocalPlayer*> LocalPlayers() {
|
||||
if (SDK::IsValidPointer(this) == false) return TArray<ULocalPlayer*>{};
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::GameInstance::LocalPlayers == -0x1) return TArray<ULocalPlayer*>{};
|
||||
return *(TArray<ULocalPlayer*>*)((uintptr_t)this + SDK::Cached::Offsets::GameInstance::LocalPlayers);
|
||||
}
|
||||
};
|
||||
class UWorld : public UObject {
|
||||
class AGameState : public AActor {
|
||||
public:
|
||||
|
||||
};
|
||||
class UWorld : public UObject {
|
||||
public:
|
||||
// VALUES
|
||||
|
||||
AGameState* GameState() {
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::World::GameState == -0x1) return nullptr;
|
||||
return (AGameState*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::World::GameState));
|
||||
}
|
||||
};
|
||||
class UGameViewportClient : public UObject {
|
||||
public:
|
||||
// VALUES
|
||||
|
||||
UWorld* World() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::GameViewportClient::World == -0x1) return nullptr;
|
||||
return (UWorld*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::GameViewportClient::World));
|
||||
}
|
||||
|
||||
UGameInstance* GameInstance() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::GameViewportClient::GameInstance == -0x1) return nullptr;
|
||||
return (UGameInstance*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::GameViewportClient::GameInstance));
|
||||
}
|
||||
|
||||
@@ -192,7 +238,7 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
UGameViewportClient* GameViewport() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::Engine::GameViewport == -0x1) return nullptr;
|
||||
return (UGameViewportClient*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::Engine::GameViewport));
|
||||
}
|
||||
|
||||
@@ -243,6 +289,18 @@ namespace SDK {
|
||||
|
||||
static UClass* StaticClass();
|
||||
};
|
||||
class UKismetMaterialLibrary : public UObject {
|
||||
public:
|
||||
// FUNCTIONS
|
||||
|
||||
UMaterialInstanceDynamic* CreateDynamicMaterialInstance(class UObject* WorldContextObject, class UMaterialInterface* Parent, class FName OptionalName);
|
||||
|
||||
|
||||
|
||||
// STATIC FUNCTIONS
|
||||
|
||||
static UKismetMaterialLibrary* StaticClass();
|
||||
};
|
||||
class UKismetMathLibrary : public UObject {
|
||||
public:
|
||||
// FUNCTIONS
|
||||
@@ -252,6 +310,8 @@ namespace SDK {
|
||||
SDK::FVector GetRightVector(const FRotator& InRot);
|
||||
|
||||
FRotator FindLookAtRotation(struct FVector Start, struct FVector Target);
|
||||
|
||||
int32 FMod(float Dividend, float Divisor, float* Remainder);
|
||||
|
||||
|
||||
|
||||
@@ -264,12 +324,12 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
void SetFontSize(int32 NewFontSize) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::Font::LegacyFontSize == -0x1) return;
|
||||
*(int32*)((uintptr_t)this + SDK::Cached::Offsets::Font::LegacyFontSize) = NewFontSize;
|
||||
}
|
||||
|
||||
int32 GetFontSize() {
|
||||
if (SDK::IsValidPointer(this) == false) return 0;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::Font::LegacyFontSize == -0x1) return 0;
|
||||
return *(int32*)((uintptr_t)this + SDK::Cached::Offsets::Font::LegacyFontSize);
|
||||
}
|
||||
};
|
||||
@@ -284,12 +344,12 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
int32 SizeX() {
|
||||
if (SDK::IsValidPointer(this) == false) return 0;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::Canvas::SizeX == -0x1) return 0;
|
||||
return *(int32*)((uintptr_t)this + SDK::Cached::Offsets::Canvas::SizeX);;
|
||||
}
|
||||
|
||||
int32 SizeY() {
|
||||
if (SDK::IsValidPointer(this) == false) return 0;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::Canvas::SizeY == -0x1) return 0;
|
||||
return *(int32*)((uintptr_t)this + SDK::Cached::Offsets::Canvas::SizeY);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,6 +51,43 @@ namespace SDK {
|
||||
ETraceTypeQuery_MAX = 33,
|
||||
};
|
||||
|
||||
enum class ECollisionChannel : uint8 {
|
||||
ECC_WorldStatic = 0,
|
||||
ECC_WorldDynamic = 1,
|
||||
ECC_Pawn = 2,
|
||||
ECC_Visibility = 3,
|
||||
ECC_Camera = 4,
|
||||
ECC_PhysicsBody = 5,
|
||||
ECC_Vehicle = 6,
|
||||
ECC_Destructible = 7,
|
||||
ECC_EngineTraceChannel1 = 8,
|
||||
ECC_EngineTraceChannel2 = 9,
|
||||
ECC_EngineTraceChannel3 = 10,
|
||||
ECC_EngineTraceChannel4 = 11,
|
||||
ECC_EngineTraceChannel5 = 12,
|
||||
ECC_EngineTraceChannel6 = 13,
|
||||
ECC_GameTraceChannel1 = 14,
|
||||
ECC_GameTraceChannel2 = 15,
|
||||
ECC_GameTraceChannel3 = 16,
|
||||
ECC_GameTraceChannel4 = 17,
|
||||
ECC_GameTraceChannel5 = 18,
|
||||
ECC_GameTraceChannel6 = 19,
|
||||
ECC_GameTraceChannel7 = 20,
|
||||
ECC_GameTraceChannel8 = 21,
|
||||
ECC_GameTraceChannel9 = 22,
|
||||
ECC_GameTraceChannel10 = 23,
|
||||
ECC_GameTraceChannel11 = 24,
|
||||
ECC_GameTraceChannel12 = 25,
|
||||
ECC_GameTraceChannel13 = 26,
|
||||
ECC_GameTraceChannel14 = 27,
|
||||
ECC_GameTraceChannel15 = 28,
|
||||
ECC_GameTraceChannel16 = 29,
|
||||
ECC_GameTraceChannel17 = 30,
|
||||
ECC_GameTraceChannel18 = 31,
|
||||
ECC_OverlapAll_Deprecated = 32,
|
||||
ECC_MAX = 33,
|
||||
};
|
||||
|
||||
enum class EDrawDebugTrace : uint8 {
|
||||
None = 0,
|
||||
ForOneFrame = 1,
|
||||
@@ -59,28 +96,33 @@ namespace SDK {
|
||||
EDrawDebugTrace_MAX = 4,
|
||||
};
|
||||
|
||||
struct FHitResult {
|
||||
enum class EMIDCreationFlags : uint8 {
|
||||
None = 0,
|
||||
Transient = 1,
|
||||
EMIDCreationFlags_MAX = 2,
|
||||
};
|
||||
|
||||
struct FHitResult
|
||||
{
|
||||
public:
|
||||
uint8 bBlockingHit : 1; // Mask: 0x1, PropSize: 0x10x0(0x1)(NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
|
||||
uint8 bStartPenetrating : 1; // Mask: 0x2, PropSize: 0x10x0(0x1)(NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
|
||||
uint8 BitPad_1D0 : 6; // Fixing Bit-Field Size [ Dumper-7 ]
|
||||
uint8 Pad_2126[0x3]; // Fixing Size After Last Property [ Dumper-7 ]
|
||||
int32 FaceIndex; // 0x4(0x4)(ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
|
||||
float Time; // 0x8(0x4)(ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
|
||||
float Distance; // 0xC(0x4)(ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
|
||||
struct SDK::FVector Location; // 0x10(0xC)(NoDestructor, NativeAccessSpecifierPublic)
|
||||
struct SDK::FVector ImpactPoint; // 0x1C(0xC)(NoDestructor, NativeAccessSpecifierPublic)
|
||||
struct SDK::FVector Normal; // 0x28(0xC)(NoDestructor, NativeAccessSpecifierPublic)
|
||||
struct SDK::FVector ImpactNormal; // 0x34(0xC)(NoDestructor, NativeAccessSpecifierPublic)
|
||||
struct SDK::FVector TraceStart; // 0x40(0xC)(NoDestructor, NativeAccessSpecifierPublic)
|
||||
struct SDK::FVector TraceEnd; // 0x4C(0xC)(NoDestructor, NativeAccessSpecifierPublic)
|
||||
float PenetrationDepth; // 0x58(0x4)(ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
|
||||
int32 Item; // 0x5C(0x4)(ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
|
||||
void* PhysMaterial; // 0x60(0x8)(ZeroConstructor, IsPlainOldData, NoDestructor, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic)
|
||||
void* Actor; // 0x68(0x8)(ZeroConstructor, IsPlainOldData, NoDestructor, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic)
|
||||
void* Component; // 0x70(0x8)(ExportObject, ZeroConstructor, InstancedReference, IsPlainOldData, NoDestructor, UObjectWrapper, HasGetValueTypeHash, NativeAccessSpecifierPublic)
|
||||
SDK::FName BoneName; // 0x78(0x8)(ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
|
||||
SDK::FName MyBoneName; // 0x80(0x8)(ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
|
||||
char UnknownData[0x100]; // Dummy data
|
||||
|
||||
// Values
|
||||
|
||||
SDK::FVector TraceStart() {
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::HitResult::TraceStart == -0x1) return SDK::FVector();
|
||||
return *(SDK::FVector*)((uintptr_t)this + SDK::Cached::Offsets::HitResult::TraceStart);
|
||||
}
|
||||
|
||||
void SetTraceStart(FVector NewTraceStart) {
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::HitResult::TraceStart == -0x1) return;
|
||||
*(SDK::FVector*)((uintptr_t)this + SDK::Cached::Offsets::HitResult::TraceStart) = NewTraceStart;
|
||||
}
|
||||
|
||||
void SetDistance(float NewDistance) {
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::HitResult::Distance == -0x1) return;
|
||||
*(float*)((uintptr_t)this + SDK::Cached::Offsets::HitResult::Distance) = NewDistance;
|
||||
}
|
||||
};
|
||||
|
||||
struct FMinimalViewInfo {
|
||||
@@ -88,12 +130,12 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
void SetLocation(SDK::FVector NewLocation) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::MinimalViewInfo::Location == -0x1) return;
|
||||
*(SDK::FVector*)((uintptr_t)this + SDK::Cached::Offsets::MinimalViewInfo::Location) = NewLocation;
|
||||
}
|
||||
|
||||
void SetRotation(SDK::FRotator NewRotation) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::MinimalViewInfo::Rotation == -0x1) return;
|
||||
*(SDK::FRotator*)((uintptr_t)this + SDK::Cached::Offsets::MinimalViewInfo::Rotation) = NewRotation;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
void SetBoostAccumulationRate(float Value, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortAntelopeVehicleConfigs::BoostAccumulationRate == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortAntelopeVehicleConfigs::BoostAccumulationRate), AutoRevertFeature);
|
||||
@@ -32,7 +32,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetBoostExpenseRate(float Value, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortAntelopeVehicleConfigs::BoostExpenseRate == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortAntelopeVehicleConfigs::BoostExpenseRate), AutoRevertFeature);
|
||||
@@ -52,7 +52,7 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
TArray<struct FFortRechargingActionTimer> BoostTimers() {
|
||||
if (SDK::IsValidPointer(this) == false) return TArray<struct FFortRechargingActionTimer>{};
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortAthenaJackalVehicle::BoostTimers == -0x1) return TArray<struct FFortRechargingActionTimer>{};
|
||||
return *(TArray<struct FFortRechargingActionTimer>*)((uintptr_t)this + SDK::Cached::Offsets::FortAthenaJackalVehicle::BoostTimers);
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
FFortRechargingActionTimer* BoostAction() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortAthenaDoghouseVehicle::BoostAction == -0x1) return nullptr;
|
||||
return (FFortRechargingActionTimer*)((uintptr_t)this + SDK::Cached::Offsets::FortAthenaDoghouseVehicle::BoostAction);
|
||||
}
|
||||
|
||||
@@ -84,7 +84,7 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
UFortAntelopeVehicleConfigs* FortAntelopeVehicleConfigs() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortAthenaAntelopeVehicle::FortAntelopeVehicleConfigs == -0x1) return nullptr;
|
||||
return (UFortAntelopeVehicleConfigs*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::FortAthenaAntelopeVehicle::FortAntelopeVehicleConfigs));
|
||||
}
|
||||
|
||||
@@ -95,7 +95,27 @@ namespace SDK {
|
||||
static UClass* StaticClass();
|
||||
};
|
||||
|
||||
class UFortWeaponItemDefinition : public UObject {
|
||||
class UFortItemDefinition : public UObject {
|
||||
public:
|
||||
// VALUES
|
||||
|
||||
FText DisplayName() {
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortItemDefinition::DisplayName == -0x1) return FText();
|
||||
return *(FText*)((uintptr_t)this + SDK::Cached::Offsets::FortItemDefinition::DisplayName);
|
||||
}
|
||||
|
||||
EFortItemTier Tier() {
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortItemDefinition::Tier == -0x1) return EFortItemTier();
|
||||
return *(EFortItemTier*)((uintptr_t)this + SDK::Cached::Offsets::FortItemDefinition::Tier);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// CUSTOM FUNCTIONS
|
||||
|
||||
FLinearColor GetRarityColor();
|
||||
};
|
||||
class UFortWeaponItemDefinition : public UFortItemDefinition {
|
||||
public:
|
||||
|
||||
};
|
||||
@@ -105,31 +125,12 @@ namespace SDK {
|
||||
|
||||
static UClass* StaticClass();
|
||||
};
|
||||
class UFortItemDefinition : public UObject {
|
||||
public:
|
||||
// VALUES
|
||||
|
||||
FText DisplayName() {
|
||||
if (SDK::IsValidPointer(this) == false) return FText();
|
||||
return *(FText*)((uintptr_t)this + SDK::Cached::Offsets::FortItemDefinition::DisplayName);
|
||||
}
|
||||
|
||||
EFortItemTier Tier() {
|
||||
if (SDK::IsValidPointer(this) == false) return EFortItemTier();
|
||||
return *(EFortItemTier*)((uintptr_t)this + SDK::Cached::Offsets::FortItemDefinition::Tier);
|
||||
}
|
||||
|
||||
//EFortItemType Type() {
|
||||
// if (!SDK::IsValidPointer(this)) return EFortItemType{};
|
||||
// return *(EFortItemType*)((uintptr_t)this + SDK::Cached::Offsets::FortItemDefinition::ItemType);
|
||||
//}
|
||||
};
|
||||
class FFortItemEntry : public UObject {
|
||||
public:
|
||||
// VALUES
|
||||
|
||||
UFortItemDefinition* ItemDefinition() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortItemEntry::ItemDefinition == -0x1) return nullptr;
|
||||
return (UFortItemDefinition*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::FortItemEntry::ItemDefinition));
|
||||
}
|
||||
};
|
||||
@@ -138,7 +139,7 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
FFortItemEntry* PrimaryPickupItemEntry() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortPickup::PrimaryPickupItemEntry == -0x1) return nullptr;
|
||||
return (FFortItemEntry*)((uintptr_t)this + SDK::Cached::Offsets::FortPickup::PrimaryPickupItemEntry);
|
||||
}
|
||||
|
||||
@@ -153,25 +154,35 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
UFortWeaponItemDefinition* WeaponData() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortWeapon::WeaponData == -0x1) return nullptr;
|
||||
return (UFortWeaponItemDefinition*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::FortWeapon::WeaponData));
|
||||
}
|
||||
|
||||
float LastFireTime() {
|
||||
if (SDK::IsValidPointer(this) == false) return 0.f;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortWeapon::LastFireTime == -0x1) return 0.f;
|
||||
return *(float*)((uintptr_t)this + SDK::Cached::Offsets::FortWeapon::LastFireTime);
|
||||
}
|
||||
|
||||
float LastFireTimeVerified() {
|
||||
if (SDK::IsValidPointer(this) == false) return 0.f;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortWeapon::LastFireTimeVerified == -0x1) return 0.f;
|
||||
return *(float*)((uintptr_t)this + SDK::Cached::Offsets::FortWeapon::LastFireTimeVerified);
|
||||
}
|
||||
|
||||
void SetLastFireTime(float NewLastFireTime) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortWeapon::LastFireTime == -0x1) return;
|
||||
*(float*)((uintptr_t)this + SDK::Cached::Offsets::FortWeapon::LastFireTime) = NewLastFireTime;
|
||||
}
|
||||
|
||||
void SetbIgnoreTryToFireSlotCooldownRestriction(bool NewValue, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortWeapon::bIgnoreTryToFireSlotCooldownRestriction == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<bool>((bool*)((uintptr_t)this + SDK::Cached::Offsets::FortWeapon::bIgnoreTryToFireSlotCooldownRestriction), AutoRevertFeature);
|
||||
}
|
||||
|
||||
*(bool*)((uintptr_t)this + SDK::Cached::Offsets::FortWeapon::bIgnoreTryToFireSlotCooldownRestriction) = NewValue;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// FUNCTIONS
|
||||
@@ -206,7 +217,7 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
uint8 TeamIndex() {
|
||||
if (SDK::IsValidPointer(this) == false) return uint8{};
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortPlayerStateAthena::TeamIndex == -0x1) return 0;
|
||||
return *(uint8*)((uintptr_t)this + SDK::Cached::Offsets::FortPlayerStateAthena::TeamIndex);
|
||||
}
|
||||
};
|
||||
@@ -214,23 +225,13 @@ namespace SDK {
|
||||
public:
|
||||
// VALUES
|
||||
|
||||
AFortPlayerState* PlayerState() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
return (AFortPlayerState*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::Pawn::PlayerState));
|
||||
}
|
||||
|
||||
AFortWeapon* CurrentWeapon() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::Pawn::PlayerState == -0x1) return nullptr;
|
||||
return (AFortWeapon*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::FortPawn::CurrentWeapon));
|
||||
}
|
||||
|
||||
FVehiclePawnState* VehicleStateLocal() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
return (FVehiclePawnState*)((uintptr_t)this + SDK::Cached::Offsets::FortPawn::VehicleStateLocal);
|
||||
}
|
||||
|
||||
bool IsDying() {
|
||||
if (SDK::IsValidPointer(this) == false) return false;
|
||||
if (SDK::IsValidPointer(this) == false || (SDK::Cached::Offsets::FortPawn::bIsDying == -0x1 && SDK::Cached::Masks::FortPawn::bIsDying == -0x1)) return false;
|
||||
|
||||
if (SDK::Cached::Masks::FortPawn::bIsDying) {
|
||||
uint8 BitField = *(uint8*)((uintptr_t)this + SDK::Cached::Offsets::FortPawn::bIsDying);
|
||||
@@ -252,6 +253,15 @@ namespace SDK {
|
||||
// STATIC FUNCTIONS
|
||||
|
||||
static UClass* StaticClass();
|
||||
};
|
||||
class AFortPlayerPawn : public AFortPawn {
|
||||
public:
|
||||
// VALUES
|
||||
|
||||
FVehiclePawnState* VehicleStateLocal() {
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortPlayerPawn::VehicleStateLocal == -0x1) return nullptr;
|
||||
return (FVehiclePawnState*)((uintptr_t)this + SDK::Cached::Offsets::FortPlayerPawn::VehicleStateLocal);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -259,17 +269,37 @@ namespace SDK {
|
||||
|
||||
AFortAthenaVehicle* GetVehicle();
|
||||
};
|
||||
class AFortPlayerPawnAthena : public AFortPawn {
|
||||
public:
|
||||
// VALUES
|
||||
|
||||
void SetbADSWhileNotOnGround(bool NewValue, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortPlayerPawnAthena::bADSWhileNotOnGround == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<bool>((bool*)((uintptr_t)this + SDK::Cached::Offsets::FortPlayerPawnAthena::bADSWhileNotOnGround), AutoRevertFeature);
|
||||
}
|
||||
|
||||
*(bool*)((uintptr_t)this + SDK::Cached::Offsets::FortPlayerPawnAthena::bADSWhileNotOnGround) = NewValue;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// STATIC FUNCTIONS
|
||||
|
||||
static UClass* StaticClass();
|
||||
};
|
||||
class ABuildingActor : public AActor {
|
||||
public:
|
||||
// VALUES
|
||||
|
||||
uint8 TeamIndex() {
|
||||
if (SDK::IsValidPointer(this) == false) return 0;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::BuildingActor::TeamIndex == -0x1) return 0;
|
||||
return *(uint8*)((uintptr_t)this + SDK::Cached::Offsets::BuildingActor::TeamIndex);
|
||||
}
|
||||
|
||||
void SetTeamIndex(uint8 NewTeamIndex, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::BuildingActor::TeamIndex == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<uint8>((uint8*)((uintptr_t)this + SDK::Cached::Offsets::BuildingActor::TeamIndex), AutoRevertFeature);
|
||||
@@ -288,7 +318,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetbBuildFree(bool NewbBuildFree, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || (SDK::Cached::Offsets::FortPlayerController::bBuildFree == -0x1 && SDK::Cached::Masks::FortPlayerController::bBuildFree)) return;
|
||||
|
||||
if (SDK::Cached::Masks::FortPlayerController::bBuildFree) {
|
||||
uint8* BitField = (uint8*)((uintptr_t)this + SDK::Cached::Offsets::FortPlayerController::bBuildFree);
|
||||
@@ -309,7 +339,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetbInfiniteAmmo(bool NewbInfiniteAmmo, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || (SDK::Cached::Offsets::FortPlayerController::bInfiniteAmmo == -0x1 && SDK::Cached::Masks::FortPlayerController::bInfiniteAmmo)) return;
|
||||
|
||||
if (SDK::Cached::Masks::FortPlayerController::bInfiniteAmmo) {
|
||||
uint8* BitField = (uint8*)((uintptr_t)this + SDK::Cached::Offsets::FortPlayerController::bInfiniteAmmo);
|
||||
@@ -337,6 +367,26 @@ namespace SDK {
|
||||
};
|
||||
class UFortLocalPlayer : public ULocalPlayer {
|
||||
public:
|
||||
// STATIC FUNCTIONS
|
||||
|
||||
static UClass* StaticClass();
|
||||
};
|
||||
class AFortGameStateAthena : public AGameState {
|
||||
public:
|
||||
// VALUES
|
||||
|
||||
void SetDefaultGliderRedeployCanRedeploy(bool NewValue, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortGameStateAthena::DefaultGliderRedeployCanRedeploy == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<bool>((bool*)((uintptr_t)this + SDK::Cached::Offsets::FortGameStateAthena::DefaultGliderRedeployCanRedeploy), AutoRevertFeature);
|
||||
}
|
||||
|
||||
*(bool*)((uintptr_t)this + SDK::Cached::Offsets::FortGameStateAthena::DefaultGliderRedeployCanRedeploy) = NewValue;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// STATIC FUNCTIONS
|
||||
|
||||
static UClass* StaticClass();
|
||||
@@ -346,7 +396,7 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
uint8 GetWeakSpotInfo() {
|
||||
if (SDK::IsValidPointer(this) == false) return 0;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::BuildingWeakSpot::WeakSpotInfoBitField == -0x1) return 0;
|
||||
return *(uint8*)((uintptr_t)this + SDK::Cached::Offsets::BuildingWeakSpot::WeakSpotInfoBitField);
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,48 @@ SDK::UClass* SDK::AFortAthenaDoghouseVehicle::StaticClass() {
|
||||
return Clss;
|
||||
}
|
||||
|
||||
SDK::FLinearColor SDK::UFortItemDefinition::GetRarityColor() {
|
||||
if (SDK::IsValidPointer(this) == false) return FLinearColor(1.f, 1.f, 1.f, 1.f);
|
||||
|
||||
EFortItemTier Tier = this->Tier();
|
||||
|
||||
switch (Tier) {
|
||||
// Common
|
||||
case SDK::EFortItemTier::I:
|
||||
return SDK::FLinearColor(0.74f, 0.74f, 0.71f, 1.0f);
|
||||
|
||||
// Uncommon
|
||||
case SDK::EFortItemTier::II:
|
||||
return SDK::FLinearColor(0.12f, 0.87f, 0.11f, 1.0f);
|
||||
|
||||
// Rare
|
||||
case SDK::EFortItemTier::III:
|
||||
return SDK::FLinearColor(0.29f, 0.33f, 0.95f, 1.0f);
|
||||
|
||||
// Epic
|
||||
case SDK::EFortItemTier::IV:
|
||||
return SDK::FLinearColor(0.65f, 0.27f, 0.82f, 1.0f);
|
||||
|
||||
// Legendary
|
||||
case SDK::EFortItemTier::V:
|
||||
return SDK::FLinearColor(0.95f, 0.40f, 0.07f, 1.0f);
|
||||
|
||||
// Mythic
|
||||
case SDK::EFortItemTier::VI:
|
||||
return SDK::FLinearColor(0.98f, 0.85f, 0.29f, 1.0f);
|
||||
|
||||
// Transcendent
|
||||
case SDK::EFortItemTier::VII:
|
||||
return SDK::FLinearColor(0.47f, 1.0f, 0.96f, 1.0f);
|
||||
|
||||
// Default
|
||||
default:
|
||||
return SDK::FLinearColor(0.74f, 0.74f, 0.71f, 1.0f);
|
||||
}
|
||||
|
||||
return SDK::FLinearColor(1.f, 1.f, 1.f, 1.f);
|
||||
}
|
||||
|
||||
SDK::UClass* SDK::UFortWeaponMeleeItemDefinition::StaticClass() {
|
||||
static class UClass* Clss = nullptr;
|
||||
|
||||
@@ -135,7 +177,7 @@ SDK::UClass* SDK::AFortPawn::StaticClass() {
|
||||
return Clss;
|
||||
}
|
||||
|
||||
SDK::AFortAthenaVehicle* SDK::AFortPawn::GetVehicle() {
|
||||
SDK::AFortAthenaVehicle* SDK::AFortPlayerPawn::GetVehicle() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
return VehicleStateLocal()->GetVehicle();
|
||||
}
|
||||
@@ -158,6 +200,15 @@ SDK::UClass* SDK::UFortLocalPlayer::StaticClass() {
|
||||
return Clss;
|
||||
}
|
||||
|
||||
SDK::UClass* SDK::AFortGameStateAthena::StaticClass() {
|
||||
static class UClass* Clss = nullptr;
|
||||
|
||||
if (!Clss)
|
||||
Clss = UObject::FindClassFast(std::string(skCrypt("FortGameStateAthena")));
|
||||
|
||||
return Clss;
|
||||
}
|
||||
|
||||
SDK::UClass* SDK::ABuildingWeakSpot::StaticClass() {
|
||||
static class UClass* Clss = nullptr;
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
class AFortAthenaVehicle* GetVehicle() {
|
||||
if (SDK::IsValidPointer(this) == false) return nullptr;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::VehiclePawnState::Vehicle == -0x1) return nullptr;
|
||||
return (AFortAthenaVehicle*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::VehiclePawnState::Vehicle));
|
||||
}
|
||||
};
|
||||
@@ -29,7 +29,7 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
void SetChargeRate(float NewChargeRate, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRechargingActionTimer::ChargeRate == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortRechargingActionTimer::ChargeRate), AutoRevertFeature);
|
||||
@@ -39,7 +39,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetActiveExpenseRate(float NewActiveExpenseRate, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRechargingActionTimer::ActiveExpenseRate == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortRechargingActionTimer::ActiveExpenseRate), AutoRevertFeature);
|
||||
@@ -49,7 +49,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetPassiveExpenseRate(float NewPassiveExpenseRate, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRechargingActionTimer::PassiveExpenseRate == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortRechargingActionTimer::PassiveExpenseRate), AutoRevertFeature);
|
||||
@@ -59,7 +59,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetCharge(float NewCharge) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRechargingActionTimer::Charge == -0x1) return;
|
||||
*(float*)((uintptr_t)this + SDK::Cached::Offsets::FortRechargingActionTimer::Charge) = NewCharge;
|
||||
}
|
||||
};
|
||||
@@ -69,7 +69,7 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
void SetReloadTime(float NewReloadTime, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRangedWeaponStats::ReloadTime == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortRangedWeaponStats::ReloadTime), AutoRevertFeature);
|
||||
@@ -84,7 +84,7 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
void SetSpread(float NewSpread, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRangedWeaponStats::Spread == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortRangedWeaponStats::Spread), AutoRevertFeature);
|
||||
@@ -94,7 +94,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetSpreadDownsights(float NewSpreadDownsights, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRangedWeaponStats::SpreadDownsights == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortRangedWeaponStats::SpreadDownsights), AutoRevertFeature);
|
||||
@@ -104,7 +104,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetStandingStillSpreadMultiplier(float NewStandingStillSpreadMultiplier, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRangedWeaponStats::StandingStillSpreadMultiplier == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortRangedWeaponStats::StandingStillSpreadMultiplier), AutoRevertFeature);
|
||||
@@ -114,7 +114,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetAthenaCrouchingSpreadMultiplier(float NewAthenaCrouchingSpreadMultiplier, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRangedWeaponStats::AthenaCrouchingSpreadMultiplier == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortRangedWeaponStats::AthenaCrouchingSpreadMultiplier), AutoRevertFeature);
|
||||
@@ -124,7 +124,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetAthenaJumpingFallingSpreadMultiplier(float NewAthenaJumpingFallingSpreadMultiplier, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRangedWeaponStats::AthenaJumpingFallingSpreadMultiplier == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortRangedWeaponStats::AthenaJumpingFallingSpreadMultiplier), AutoRevertFeature);
|
||||
@@ -134,7 +134,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetAthenaSprintingSpreadMultiplier(float NewAthenaSprintingSpreadMultiplier, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRangedWeaponStats::AthenaSprintingSpreadMultiplier == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortRangedWeaponStats::AthenaSprintingSpreadMultiplier), AutoRevertFeature);
|
||||
@@ -144,7 +144,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetMinSpeedForSpreadMultiplier(float NewMinSpeedForSpreadMultiplier, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRangedWeaponStats::MinSpeedForSpreadMultiplier == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortRangedWeaponStats::MinSpeedForSpreadMultiplier), AutoRevertFeature);
|
||||
@@ -154,7 +154,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetMaxSpeedForSpreadMultiplier(float NewMaxSpeedForSpreadMultiplier, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRangedWeaponStats::MaxSpeedForSpreadMultiplier == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortRangedWeaponStats::MaxSpeedForSpreadMultiplier), AutoRevertFeature);
|
||||
@@ -164,7 +164,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetRecoilVert(float NewRecoilVert, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRangedWeaponStats::RecoilVert == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortRangedWeaponStats::RecoilVert), AutoRevertFeature);
|
||||
@@ -174,7 +174,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetRecoilHoriz(float NewRecoilHoriz, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRangedWeaponStats::RecoilHoriz == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortRangedWeaponStats::RecoilHoriz), AutoRevertFeature);
|
||||
@@ -184,7 +184,7 @@ namespace SDK {
|
||||
}
|
||||
|
||||
void SetBulletsPerCartridge(int32 NewBulletsPerCartridge, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortRangedWeaponStats::BulletsPerCartridge == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<int32>((int32*)((uintptr_t)this + SDK::Cached::Offsets::FortRangedWeaponStats::BulletsPerCartridge), AutoRevertFeature);
|
||||
@@ -200,12 +200,12 @@ namespace SDK {
|
||||
// VALUES
|
||||
|
||||
float GetSwingPlaySpeed() {
|
||||
if (SDK::IsValidPointer(this) == false) return 0;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortMeleeWeaponStats::SwingPlaySpeed == -0x1) return 0;
|
||||
return *(float*)((uintptr_t)this + SDK::Cached::Offsets::FortMeleeWeaponStats::SwingPlaySpeed);
|
||||
}
|
||||
|
||||
void SetSwingPlaySpeed(float NewSwingPlaySpeed, bool* AutoRevertFeature = nullptr) {
|
||||
if (SDK::IsValidPointer(this) == false) return;
|
||||
if (SDK::IsValidPointer(this) == false || SDK::Cached::Offsets::FortMeleeWeaponStats::SwingPlaySpeed == -0x1) return;
|
||||
|
||||
if (AutoRevertFeature) {
|
||||
Features::CreateAutoRevertFeature<float>((float*)((uintptr_t)this + SDK::Cached::Offsets::FortMeleeWeaponStats::SwingPlaySpeed), AutoRevertFeature);
|
||||
|
||||
@@ -67,6 +67,7 @@ void SDK::Init() {
|
||||
|
||||
// Init CalculateShot function offset (requires game version)
|
||||
SDKInitializer::InitCalculateShot();
|
||||
SDKInitializer::InitRaycastMulti();
|
||||
|
||||
// Continue initiating VFT Indexes
|
||||
SDKInitializer::InitDTIndex();
|
||||
@@ -93,9 +94,11 @@ void SDK::Init() {
|
||||
FunctionSearch { std::string(skCrypt("Controller")), std::string(skCrypt("ClientSetRotation")), &SDK::Cached::Functions::PlayerController::ClientSetRotation },
|
||||
FunctionSearch { std::string(skCrypt("Controller")), std::string(skCrypt("SetControlRotation")), &SDK::Cached::Functions::PlayerController::SetControlRotation },
|
||||
FunctionSearch { std::string(skCrypt("KismetSystemLibrary")), std::string(skCrypt("LineTraceSingle")), &SDK::Cached::Functions::KismetSystemLibrary::LineTraceSingle },
|
||||
FunctionSearch { std::string(skCrypt("KismetMaterialLibrary")), std::string(skCrypt("CreateDynamicMaterialInstance")),&SDK::Cached::Functions::KismetMaterialLibrary::CreateDynamicMaterialInstance},
|
||||
FunctionSearch { std::string(skCrypt("KismetMathLibrary")), std::string(skCrypt("FindLookAtRotation")), &SDK::Cached::Functions::KismetMathLibrary::FindLookAtRotation },
|
||||
FunctionSearch { std::string(skCrypt("KismetMathLibrary")), std::string(skCrypt("GetForwardVector")), &SDK::Cached::Functions::KismetMathLibrary::GetForwardVector },
|
||||
FunctionSearch { std::string(skCrypt("KismetMathLibrary")), std::string(skCrypt("GetRightVector")), &SDK::Cached::Functions::KismetMathLibrary::GetRightVector },
|
||||
FunctionSearch { std::string(skCrypt("KismetMathLibrary")), std::string(skCrypt("FMod")), &SDK::Cached::Functions::KismetMathLibrary::FMod },
|
||||
FunctionSearch { std::string(skCrypt("PlayerState")), std::string(skCrypt("GetPlayerName")), &SDK::Cached::Functions::PlayerState::GetPlayerName },
|
||||
FunctionSearch { std::string(skCrypt("SkinnedMeshComponent")), std::string(skCrypt("GetBoneName")), &SDK::Cached::Functions::SkinnedMeshComponent::GetBoneName },
|
||||
FunctionSearch { std::string(skCrypt("SceneComponent")), std::string(skCrypt("GetSocketLocation")), &SDK::Cached::Functions::SkinnedMeshComponent::GetSocketLocation },
|
||||
@@ -109,11 +112,14 @@ void SDK::Init() {
|
||||
FunctionSearch { std::string(skCrypt("FortWeapon")), std::string(skCrypt("IsProjectileWeapon")), &SDK::Cached::Functions::FortWeapon::IsProjectileWeapon },
|
||||
FunctionSearch { std::string(skCrypt("FortWeapon")), std::string(skCrypt("GetProjectileSpeed")), &SDK::Cached::Functions::FortWeapon::GetProjectileSpeed },
|
||||
FunctionSearch { std::string(skCrypt("FortPlayerPawn")), std::string(skCrypt("ServerHandlePickup")), &SDK::Cached::Functions::FortPlayerPawn::ServerHandlePickup },
|
||||
FunctionSearch { std::string(skCrypt("MeshComponent")), std::string(skCrypt("GetMaterials")), &SDK::Cached::Functions::MeshComponent::GetMaterials },
|
||||
FunctionSearch { std::string(skCrypt("PrimitiveComponent")), std::string(skCrypt("SetMaterial")), &SDK::Cached::Functions::PrimitiveComponent::SetMaterial },
|
||||
};
|
||||
|
||||
std::vector<OffsetSearch> Offsets{
|
||||
OffsetSearch { std::string(skCrypt("GameViewportClient")), std::string(skCrypt("GameInstance")), &SDK::Cached::Offsets::GameViewportClient::GameInstance, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("Engine")), std::string(skCrypt("GameViewport")), &SDK::Cached::Offsets::Engine::GameViewport, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("Engine")), std::string(skCrypt("WireframeMaterial")), &SDK::Cached::Offsets::Engine::WireframeMaterial, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("GameViewportClient")), std::string(skCrypt("World")), &SDK::Cached::Offsets::GameViewportClient::World, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("GameInstance")), std::string(skCrypt("LocalPlayers")), &SDK::Cached::Offsets::GameInstance::LocalPlayers, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("Player")), std::string(skCrypt("PlayerController")), &SDK::Cached::Offsets::Player::PlayerController, nullptr },
|
||||
@@ -123,6 +129,11 @@ void SDK::Init() {
|
||||
OffsetSearch { std::string(skCrypt("Pawn")), std::string(skCrypt("PlayerState")), &SDK::Cached::Offsets::Pawn::PlayerState, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("Character")), std::string(skCrypt("Mesh")), &SDK::Cached::Offsets::Character::Mesh, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("Font")), std::string(skCrypt("LegacyFontSize")), &SDK::Cached::Offsets::Font::LegacyFontSize, nullptr },
|
||||
|
||||
OffsetSearch { std::string(skCrypt("HitResult")), std::string(skCrypt("TraceStart")), &SDK::Cached::Offsets::HitResult::TraceStart, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("HitResult")), std::string(skCrypt("Distance")), &SDK::Cached::Offsets::HitResult::Distance, nullptr },
|
||||
|
||||
OffsetSearch { std::string(skCrypt("World")), std::string(skCrypt("GameState")), &SDK::Cached::Offsets::World::GameState, nullptr },
|
||||
|
||||
OffsetSearch { std::string(skCrypt("FortPickup")), std::string(skCrypt("PrimaryPickupItemEntry")), &SDK::Cached::Offsets::FortPickup::PrimaryPickupItemEntry, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("FortItemDefinition")), std::string(skCrypt("DisplayName")), &SDK::Cached::Offsets::FortItemDefinition::DisplayName, nullptr },
|
||||
@@ -133,10 +144,12 @@ void SDK::Init() {
|
||||
OffsetSearch { std::string(skCrypt("Canvas")), std::string(skCrypt("SizeY")), &SDK::Cached::Offsets::Canvas::SizeY, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("FortPawn")), std::string(skCrypt("CurrentWeapon")), &SDK::Cached::Offsets::FortPawn::CurrentWeapon, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("FortPawn")), std::string(skCrypt("bIsDying")), &SDK::Cached::Offsets::FortPawn::bIsDying, &SDK::Cached::Masks::FortPawn::bIsDying },
|
||||
OffsetSearch { std::string(skCrypt("FortPlayerPawn")), std::string(skCrypt("VehicleStateLocal")), &SDK::Cached::Offsets::FortPawn::VehicleStateLocal, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("FortPlayerPawn")), std::string(skCrypt("VehicleStateLocal")), &SDK::Cached::Offsets::FortPlayerPawn::VehicleStateLocal, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("FortPlayerPawnAthena")), std::string(skCrypt("bADSWhileNotOnGround")), &SDK::Cached::Offsets::FortPlayerPawnAthena::bADSWhileNotOnGround,nullptr },
|
||||
OffsetSearch { std::string(skCrypt("BuildingWeakSpot")), std::string(skCrypt("bHit")), &SDK::Cached::Offsets::BuildingWeakSpot::WeakSpotInfoBitField, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("FortWeapon")), std::string(skCrypt("WeaponData")), &SDK::Cached::Offsets::FortWeapon::WeaponData, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("FortWeapon")), std::string(skCrypt("LastFireTime")), &SDK::Cached::Offsets::FortWeapon::LastFireTime, nullptr },
|
||||
OffsetSearch { std::string(skCrypt("FortWeapon")), std::string(skCrypt("bIgnoreTryToFireSlotCooldownRestriction")), &SDK::Cached::Offsets::FortWeapon::bIgnoreTryToFireSlotCooldownRestriction, nullptr },
|
||||
|
||||
OffsetSearch { std::string(skCrypt("FortPlayerController")), std::string(skCrypt("bBuildFree")), &SDK::Cached::Offsets::FortPlayerController::bBuildFree, &SDK::Cached::Masks::FortPlayerController::bBuildFree },
|
||||
OffsetSearch { std::string(skCrypt("FortPlayerController")), std::string(skCrypt("bInfiniteAmmo")), &SDK::Cached::Offsets::FortPlayerController::bInfiniteAmmo, &SDK::Cached::Masks::FortPlayerController::bInfiniteAmmo },
|
||||
@@ -179,6 +192,8 @@ void SDK::Init() {
|
||||
Offsets.push_back(OffsetSearch{ std::string(skCrypt("FortAthenaAntelopeVehicle")), std::string(skCrypt("FortAntelopeVehicleConfigs")), &SDK::Cached::Offsets::FortAthenaAntelopeVehicle::FortAntelopeVehicleConfigs, nullptr });
|
||||
|
||||
Offsets.push_back(OffsetSearch{ std::string(skCrypt("FortAthenaJackalVehicle")), std::string(skCrypt("BoostTimers")), &SDK::Cached::Offsets::FortAthenaJackalVehicle::BoostTimers, nullptr });
|
||||
|
||||
Offsets.push_back(OffsetSearch{ std::string(skCrypt("FortGameStateAthena")), std::string(skCrypt("DefaultGliderRedeployCanRedeploy")), &SDK::Cached::Offsets::FortGameStateAthena::DefaultGliderRedeployCanRedeploy, nullptr });
|
||||
}
|
||||
|
||||
if (SDK::GetGameVersion() >= 7.00) {
|
||||
@@ -201,6 +216,8 @@ void SDK::Init() {
|
||||
Input::Init();
|
||||
Features::FortPawnHelper::Bone::Init();
|
||||
|
||||
DEBUG_LOG(LOG_OFFSET, std::string(skCrypt("SDK Initialized!")));
|
||||
|
||||
#if OBJECT_DUMP
|
||||
for (int i = 0; i < SDK::UObject::ObjectArray.Num(); i++) {
|
||||
SDK::UObject* Object = SDK::UObject::ObjectArray.GetByIndex(i);
|
||||
|
||||
@@ -14,249 +14,286 @@ namespace SDK {
|
||||
}
|
||||
|
||||
namespace Offsets {
|
||||
namespace World {
|
||||
inline uintptr_t GameState = -0x1;
|
||||
}
|
||||
|
||||
namespace Canvas {
|
||||
inline uintptr_t SizeX;
|
||||
inline uintptr_t SizeY;
|
||||
inline uintptr_t SizeX = -0x1;
|
||||
inline uintptr_t SizeY = -0x1;
|
||||
}
|
||||
|
||||
namespace Character {
|
||||
inline uintptr_t Mesh;
|
||||
inline uintptr_t Mesh = -0x1;
|
||||
}
|
||||
|
||||
namespace Pawn {
|
||||
inline uintptr_t PlayerState;
|
||||
inline uintptr_t PlayerState = -0x1;
|
||||
}
|
||||
|
||||
namespace FortPawn {
|
||||
inline uintptr_t bIsDying;
|
||||
inline uintptr_t CurrentWeapon;
|
||||
inline uintptr_t VehicleStateLocal;
|
||||
inline uintptr_t bIsDying = -0x1;
|
||||
inline uintptr_t CurrentWeapon = -0x1;
|
||||
}
|
||||
|
||||
namespace FortPlayerPawn {
|
||||
inline uintptr_t VehicleStateLocal = -0x1;
|
||||
}
|
||||
|
||||
namespace FortPlayerPawnAthena {
|
||||
inline uintptr_t bADSWhileNotOnGround = -0x1;
|
||||
}
|
||||
|
||||
namespace Font {
|
||||
inline uintptr_t LegacyFontSize;
|
||||
inline uintptr_t LegacyFontSize = -0x1;
|
||||
}
|
||||
|
||||
namespace Engine {
|
||||
inline uintptr_t GameViewport;
|
||||
inline uintptr_t GameViewport = -0x1;
|
||||
inline uintptr_t WireframeMaterial = -0x1;
|
||||
}
|
||||
|
||||
namespace GameViewportClient {
|
||||
inline uintptr_t World;
|
||||
inline uintptr_t GameInstance; // DO NOT DELETE! Required for getting PostRender VFT index
|
||||
inline uintptr_t World = -0x1;
|
||||
inline uintptr_t GameInstance = -0x1; // DO NOT DELETE! Required for getting PostRender VFT index
|
||||
}
|
||||
|
||||
namespace GameInstance {
|
||||
inline uintptr_t LocalPlayers;
|
||||
inline uintptr_t LocalPlayers = -0x1;
|
||||
}
|
||||
|
||||
namespace Player {
|
||||
inline uintptr_t PlayerController;
|
||||
inline uintptr_t PlayerController = -0x1;
|
||||
}
|
||||
|
||||
namespace PlayerController {
|
||||
inline uintptr_t AcknowledgedPawn;
|
||||
inline uintptr_t PlayerCameraManager;
|
||||
inline uintptr_t AcknowledgedPawn = -0x1;
|
||||
inline uintptr_t PlayerCameraManager = -0x1;
|
||||
}
|
||||
|
||||
namespace HUD {
|
||||
inline uintptr_t Canvas;
|
||||
inline uintptr_t Canvas = -0x1;
|
||||
}
|
||||
|
||||
namespace HitResult {
|
||||
inline uintptr_t TraceStart = -0x1;
|
||||
inline uintptr_t Distance = -0x1;
|
||||
}
|
||||
|
||||
namespace FortItemEntry {
|
||||
inline uintptr_t ItemDefinition;
|
||||
inline uintptr_t ItemDefinition = -0x1;
|
||||
}
|
||||
|
||||
namespace FortPickup {
|
||||
inline uintptr_t PrimaryPickupItemEntry;
|
||||
inline uintptr_t PrimaryPickupItemEntry = -0x1;
|
||||
}
|
||||
|
||||
namespace FortWeapon {
|
||||
inline uintptr_t WeaponData;
|
||||
inline uintptr_t WeaponData = -0x1;
|
||||
|
||||
inline uintptr_t LastFireTime;
|
||||
inline uintptr_t LastFireTimeVerified;
|
||||
inline uintptr_t LastFireTime = -0x1;
|
||||
inline uintptr_t LastFireTimeVerified = -0x1;
|
||||
|
||||
inline uintptr_t bIgnoreTryToFireSlotCooldownRestriction = -0x1;
|
||||
}
|
||||
|
||||
namespace FortItemDefinition {
|
||||
inline uintptr_t DisplayName;
|
||||
inline uintptr_t Tier;
|
||||
inline uintptr_t DisplayName = -0x1;
|
||||
inline uintptr_t Tier = -0x1;
|
||||
}
|
||||
|
||||
namespace Actor {
|
||||
inline uintptr_t RootComponent;
|
||||
inline uintptr_t RootComponent = -0x1;
|
||||
}
|
||||
|
||||
namespace SceneComponent {
|
||||
inline uintptr_t RelativeLocation;
|
||||
inline uintptr_t RelativeLocation = -0x1;
|
||||
}
|
||||
|
||||
namespace FortPlayerStateAthena {
|
||||
inline uintptr_t TeamIndex;
|
||||
inline uintptr_t TeamIndex = -0x1;
|
||||
}
|
||||
|
||||
namespace BuildingWeakSpot {
|
||||
inline uintptr_t WeakSpotInfoBitField;
|
||||
inline uintptr_t WeakSpotInfoBitField = -0x1;
|
||||
}
|
||||
|
||||
namespace MinimalViewInfo {
|
||||
inline uintptr_t Location;
|
||||
inline uintptr_t Rotation;
|
||||
inline uintptr_t Location = -0x1;
|
||||
inline uintptr_t Rotation = -0x1;
|
||||
}
|
||||
|
||||
namespace FortMeleeWeaponStats {
|
||||
inline uintptr_t SwingPlaySpeed;
|
||||
inline uintptr_t SwingPlaySpeed = -0x1;
|
||||
}
|
||||
|
||||
namespace FortRangedWeaponStats {
|
||||
inline uintptr_t Spread;
|
||||
inline uintptr_t SpreadDownsights;
|
||||
inline uintptr_t StandingStillSpreadMultiplier;
|
||||
inline uintptr_t AthenaCrouchingSpreadMultiplier;
|
||||
inline uintptr_t AthenaJumpingFallingSpreadMultiplier;
|
||||
inline uintptr_t AthenaSprintingSpreadMultiplier;
|
||||
inline uintptr_t MinSpeedForSpreadMultiplier;
|
||||
inline uintptr_t MaxSpeedForSpreadMultiplier;
|
||||
inline uintptr_t Spread = -0x1;
|
||||
inline uintptr_t SpreadDownsights = -0x1;
|
||||
inline uintptr_t StandingStillSpreadMultiplier = -0x1;
|
||||
inline uintptr_t AthenaCrouchingSpreadMultiplier = -0x1;
|
||||
inline uintptr_t AthenaJumpingFallingSpreadMultiplier = -0x1;
|
||||
inline uintptr_t AthenaSprintingSpreadMultiplier = -0x1;
|
||||
inline uintptr_t MinSpeedForSpreadMultiplier = -0x1;
|
||||
inline uintptr_t MaxSpeedForSpreadMultiplier = -0x1;
|
||||
|
||||
inline uintptr_t BulletsPerCartridge;
|
||||
inline uintptr_t ReloadTime;
|
||||
inline uintptr_t RecoilVert;
|
||||
inline uintptr_t RecoilHoriz;
|
||||
inline uintptr_t BulletsPerCartridge = -0x1;
|
||||
inline uintptr_t ReloadTime = -0x1;
|
||||
inline uintptr_t RecoilVert = -0x1;
|
||||
inline uintptr_t RecoilHoriz = -0x1;
|
||||
}
|
||||
|
||||
namespace FortAthenaAntelopeVehicle {
|
||||
inline uintptr_t FortAntelopeVehicleConfigs;
|
||||
inline uintptr_t FortAntelopeVehicleConfigs = -0x1;
|
||||
}
|
||||
|
||||
namespace FortAthenaJackalVehicle {
|
||||
inline uintptr_t BoostTimers;
|
||||
inline uintptr_t BoostTimers = -0x1;
|
||||
}
|
||||
|
||||
namespace FortAthenaDoghouseVehicle {
|
||||
inline uintptr_t BoostAction;
|
||||
inline uintptr_t BoostAction = -0x1;
|
||||
}
|
||||
|
||||
namespace FortAntelopeVehicleConfigs {
|
||||
inline uintptr_t BoostAccumulationRate;
|
||||
inline uintptr_t BoostExpenseRate;
|
||||
inline uintptr_t BoostAccumulationRate = -0x1;
|
||||
inline uintptr_t BoostExpenseRate = -0x1;
|
||||
}
|
||||
|
||||
namespace VehiclePawnState {
|
||||
inline uintptr_t Vehicle;
|
||||
inline uintptr_t Vehicle = -0x1;
|
||||
}
|
||||
|
||||
namespace FortRechargingActionTimer {
|
||||
inline uintptr_t ChargeRate;
|
||||
inline uintptr_t ActiveExpenseRate;
|
||||
inline uintptr_t PassiveExpenseRate;
|
||||
inline uintptr_t Charge;
|
||||
inline uintptr_t ChargeRate = -0x1;
|
||||
inline uintptr_t ActiveExpenseRate = -0x1;
|
||||
inline uintptr_t PassiveExpenseRate = -0x1;
|
||||
inline uintptr_t Charge = -0x1;
|
||||
}
|
||||
|
||||
namespace BuildingActor {
|
||||
inline uintptr_t TeamIndex;
|
||||
inline uintptr_t TeamIndex = -0x1;
|
||||
}
|
||||
|
||||
namespace FortPlayerController {
|
||||
inline uintptr_t bBuildFree;
|
||||
inline uintptr_t bInfiniteAmmo;
|
||||
inline uintptr_t TargetedBuilding;
|
||||
inline uintptr_t bBuildFree = -0x1;
|
||||
inline uintptr_t bInfiniteAmmo = -0x1;
|
||||
inline uintptr_t TargetedBuilding = -0x1;
|
||||
}
|
||||
|
||||
namespace FortGameStateAthena {
|
||||
inline uintptr_t DefaultGliderRedeployCanRedeploy = -0x1;
|
||||
}
|
||||
}
|
||||
|
||||
namespace Functions {
|
||||
namespace SceneComponent {
|
||||
inline void* SetPhysicsLinearVelocity;
|
||||
inline void* SetPhysicsLinearVelocity = nullptr;
|
||||
}
|
||||
|
||||
namespace PrimitiveComponent {
|
||||
inline void* SetMaterial = nullptr;
|
||||
}
|
||||
|
||||
namespace MeshComponent {
|
||||
inline void* GetMaterials = nullptr;
|
||||
}
|
||||
|
||||
namespace Actor {
|
||||
inline void* K2_TeleportTo;
|
||||
inline void* K2_SetActorRotation;
|
||||
inline void* K2_SetActorLocation;
|
||||
inline void* SetActorEnableCollision;
|
||||
inline void* K2_TeleportTo = nullptr;
|
||||
inline void* K2_SetActorRotation = nullptr;
|
||||
inline void* K2_SetActorLocation = nullptr;
|
||||
inline void* SetActorEnableCollision = nullptr;
|
||||
}
|
||||
|
||||
namespace Pawn {
|
||||
inline void* GetMovementComponent;
|
||||
inline void* GetMovementComponent = nullptr;
|
||||
}
|
||||
|
||||
namespace MovementComponent {
|
||||
inline void* StopMovementImmediately;
|
||||
inline void* StopMovementImmediately = nullptr;
|
||||
}
|
||||
|
||||
namespace Canvas {
|
||||
inline void* K2_DrawLine;
|
||||
inline void* K2_DrawText;
|
||||
inline void* K2_TextSize;
|
||||
inline void* K2_Project;
|
||||
inline void* K2_DrawBox;
|
||||
inline void* K2_DrawLine = nullptr;
|
||||
inline void* K2_DrawText = nullptr;
|
||||
inline void* K2_TextSize = nullptr;
|
||||
inline void* K2_Project = nullptr;
|
||||
inline void* K2_DrawBox = nullptr;
|
||||
}
|
||||
|
||||
namespace KismetSystemLibrary {
|
||||
inline void* GetEngineVersion;
|
||||
inline void* LineTraceSingle;
|
||||
inline void* GetEngineVersion = nullptr;
|
||||
inline void* LineTraceSingle = nullptr;
|
||||
}
|
||||
|
||||
namespace KismetMaterialLibrary {
|
||||
inline void* CreateDynamicMaterialInstance = nullptr;
|
||||
}
|
||||
|
||||
namespace KismetMathLibrary {
|
||||
inline void* FindLookAtRotation;
|
||||
inline void* GetForwardVector;
|
||||
inline void* GetRightVector;
|
||||
inline void* FindLookAtRotation = nullptr;
|
||||
inline void* GetForwardVector = nullptr;
|
||||
inline void* GetRightVector = nullptr;
|
||||
inline void* FMod = nullptr;
|
||||
}
|
||||
|
||||
namespace GameplayStatics {
|
||||
inline void* GetAllActorsOfClass;
|
||||
inline void* GetAllActorsOfClass = nullptr;
|
||||
}
|
||||
|
||||
namespace PlayerCameraManager {
|
||||
inline void* GetCameraLocation;
|
||||
inline void* GetCameraRotation;
|
||||
inline void* GetFOVAngle;
|
||||
inline void* GetCameraLocation = nullptr;
|
||||
inline void* GetCameraRotation = nullptr;
|
||||
inline void* GetFOVAngle = nullptr;
|
||||
}
|
||||
|
||||
namespace PlayerController {
|
||||
inline void* WasInputKeyJustReleased;
|
||||
inline void* WasInputKeyJustPressed;
|
||||
inline void* IsInputKeyDown;
|
||||
inline void* ClientSetRotation;
|
||||
inline void* SetControlRotation;
|
||||
inline void* GetMousePosition;
|
||||
inline void* WasInputKeyJustReleased = nullptr;
|
||||
inline void* WasInputKeyJustPressed = nullptr;
|
||||
inline void* IsInputKeyDown = nullptr;
|
||||
inline void* ClientSetRotation = nullptr;
|
||||
inline void* SetControlRotation = nullptr;
|
||||
inline void* GetMousePosition = nullptr;
|
||||
}
|
||||
|
||||
namespace PlayerState {
|
||||
inline void* GetPlayerName;
|
||||
inline void* GetPlayerName = nullptr;
|
||||
}
|
||||
|
||||
namespace SkinnedMeshComponent {
|
||||
inline void* GetBoneName;
|
||||
inline void* GetSocketLocation;
|
||||
inline void* GetBoneName = nullptr;
|
||||
inline void* GetSocketLocation = nullptr;
|
||||
}
|
||||
|
||||
namespace FortWeapon {
|
||||
inline void* IsProjectileWeapon;
|
||||
inline void* GetProjectileSpeed;
|
||||
inline void* IsProjectileWeapon = nullptr;
|
||||
inline void* GetProjectileSpeed = nullptr;
|
||||
}
|
||||
|
||||
namespace FortPlayerPawn {
|
||||
inline void* ServerHandlePickup;
|
||||
inline void* ServerHandlePickup = nullptr;
|
||||
}
|
||||
|
||||
namespace BuildingActor {
|
||||
inline void* SetTeam;
|
||||
inline void* SetTeam = nullptr;
|
||||
}
|
||||
|
||||
inline uintptr_t AppendString = 0x0;
|
||||
inline uintptr_t FNameConstructor = 0x0;
|
||||
inline uintptr_t LineTraceSingle = 0x0;
|
||||
inline uintptr_t CalculateShot = 0x0;
|
||||
inline uintptr_t RaycastMulti = 0x0;
|
||||
}
|
||||
|
||||
namespace Masks {
|
||||
namespace FortPawn{
|
||||
inline uintptr_t bIsDying;
|
||||
inline uintptr_t bIsDying = -0x1;
|
||||
}
|
||||
|
||||
namespace FortPlayerController {
|
||||
inline uintptr_t bBuildFree;
|
||||
inline uintptr_t bInfiniteAmmo;
|
||||
inline uintptr_t bBuildFree = -0x1;
|
||||
inline uintptr_t bInfiniteAmmo = -0x1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,10 +115,11 @@ void SDKInitializer::InitDTIndex() {
|
||||
}
|
||||
|
||||
if (Vft == nullptr) {
|
||||
THROW_ERROR(std::string(skCrypt("Failed to find VFT for UGameViewportClient!")), false);
|
||||
THROW_ERROR(std::string(skCrypt("Failed to find VFT for UGameViewportClient!")), true);
|
||||
return;
|
||||
}
|
||||
|
||||
uintptr_t GameInstance = 0;
|
||||
uintptr_t GameInstance = -0x1;
|
||||
|
||||
std::vector<FunctionSearch> Functions = {};
|
||||
std::vector<OffsetSearch> Offsets = { OffsetSearch{ std::string(skCrypt("GameViewportClient")), std::string(skCrypt("GameInstance")), &GameInstance, nullptr }};
|
||||
@@ -220,6 +221,7 @@ void SDKInitializer::InitGPVIndex() {
|
||||
|
||||
if (Vft == nullptr) {
|
||||
THROW_ERROR(std::string(skCrypt("Failed to find VFT for APlayerController!")), CRASH_ON_NOT_FOUND);
|
||||
return;
|
||||
}
|
||||
|
||||
auto Resolve32BitRelativeJump = [](void* FunctionPtr) -> uint8_t*
|
||||
@@ -258,8 +260,9 @@ void SDKInitializer::InitGPVIndex() {
|
||||
|
||||
// Signature for UE5 builds (19.00+)
|
||||
|| (SDK::GetGameVersion() >= 19.00 && Memory::FindPatternInRange({ 0x48, 0x81, 0xEC, -0x01, -0x01, 0x00, 0x00 }, Resolve32BitRelativeJump(Vft[i]), 0x70)
|
||||
&& (Memory::FindPatternInRange({ 0x44, 0x0F, -0x01, -0x01, -0x01, -0x01, 0x44, 0x0F, -0x01, -0x01, -0x01, -0x01 }, Resolve32BitRelativeJump(Vft[i]), 0x70)
|
||||
|| Memory::FindPatternInRange({ 0x44, 0x0F, -0x01, -0x01, -0x01, 0x44, 0x0F, -0x01, -0x01, -0x01 }, Resolve32BitRelativeJump(Vft[i]), 0x70))
|
||||
&& Memory::FindPatternInRange({ 0x48, 0x8B, -0x01, -0x01, 0x48, 0x8B }, Resolve32BitRelativeJump(Vft[i]), 0x70)
|
||||
&& (Memory::FindPatternInRange({ 0x44, 0x0F, -0x01, -0x01, -0x01, -0x01, 0x44 }, Resolve32BitRelativeJump(Vft[i]), 0x70)
|
||||
|| Memory::FindPatternInRange({ 0x44, 0x0F, -0x01, -0x01, -0x01, 0x44, 0x0F }, Resolve32BitRelativeJump(Vft[i]), 0x70))
|
||||
)
|
||||
)
|
||||
{
|
||||
@@ -334,7 +337,7 @@ void SDKInitializer::InitGetWeaponStatsIndex(const SDK::UObject* WeaponActor) {
|
||||
}
|
||||
|
||||
if (SDK::Cached::VFT::GetWeaponStats == 0x0) {
|
||||
THROW_ERROR(std::string(skCrypt("Failed to find GetWeaponStats VFT index! (Using fall back VFT index, may cause crashes)")), CRASH_ON_NOT_FOUND);
|
||||
THROW_ERROR(std::string(skCrypt("Failed to find GetWeaponStats VFT index! (Using fall back VFT index, may cause crashes)")), false);
|
||||
|
||||
// This is usually the VFT index for GetWeaponStats, but it's not guaranteed
|
||||
// Later, make it follow the jnz to find the sub routine
|
||||
@@ -413,48 +416,69 @@ void SDKInitializer::InitLineTraceSingle() {
|
||||
void SDKInitializer::InitCalculateShot() {
|
||||
uintptr_t CalculateShotAddress = 0x0;
|
||||
|
||||
if (SDK::GetGameVersion() > 16.00) {
|
||||
if (SDK::GetGameVersion() >= 16.00) {
|
||||
CalculateShotAddress = Memory::PatternScan(
|
||||
SDK::GetBaseAddress(),
|
||||
skCrypt("48 8B C4 48 89 58 18 55 56 57 41 54 41 55 41 56 41 57 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 0F 29 70 B8 0F 29 78 A8 44 0F 29 40 ? 44 0F 29 48 ? 44 0F 29 90 ? ? ? ? 44 0F 29 98 ? ? ? ? 44 0F 29 A0 ? ? ? ? 44 0F 29 A8 ? ? ? ? 48 8B 05 ? ? ? ? 48 33 C4 48 89 85 ? ? ? ? 4C 8D A1"),
|
||||
0,
|
||||
false);
|
||||
}
|
||||
else if (SDK::GetGameVersion() > 14.00) {
|
||||
else if (SDK::GetGameVersion() >= 14.00) {
|
||||
CalculateShotAddress = Memory::PatternScan(
|
||||
SDK::GetBaseAddress(),
|
||||
skCrypt("48 89 5C 24 ? 4C 89 4C 24 ? 55 56 57 41 54 41 55 41 56 41 57 48 8D 6C 24 ? 48 81 EC ? ? ? ? 48 8B F9 4C"),
|
||||
0,
|
||||
false);
|
||||
}
|
||||
else if (SDK::GetGameVersion() > 12.00) {
|
||||
else if (SDK::GetGameVersion() >= 12.00) {
|
||||
CalculateShotAddress = Memory::PatternScan(
|
||||
SDK::GetBaseAddress(),
|
||||
skCrypt("48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 4C 89 4C 24 ? 55 41 54 41 55 41 56 41 57 48 8D 6C 24 ? 48 81 EC ? ? ? ? 48 8B F1 4C 8D"),
|
||||
0,
|
||||
false);
|
||||
}
|
||||
else if (SDK::GetGameVersion() > 11.00) {
|
||||
else if (SDK::GetGameVersion() >= 11.00) {
|
||||
CalculateShotAddress = Memory::PatternScan(
|
||||
SDK::GetBaseAddress(),
|
||||
skCrypt("48 8B C4 48 89 58 10 4C 89 48 20 55 56 57 41 54 41 55 41 56 41 57 48 8D 68 98"),
|
||||
0,
|
||||
false);
|
||||
}
|
||||
else if (SDK::GetGameVersion() > 8.00) {
|
||||
else if (SDK::GetGameVersion() >= 8.00) {
|
||||
CalculateShotAddress = Memory::PatternScan(
|
||||
SDK::GetBaseAddress(),
|
||||
skCrypt("48 8B C4 48 89 58 10 4C 89 48 20 55 56 57 41 54 41 55 41 56 41 57 48 8D 68 98"),
|
||||
0,
|
||||
false);
|
||||
}
|
||||
else if (SDK::GetGameVersion() > 7.00) {
|
||||
else if (SDK::GetGameVersion() >= 7.00) {
|
||||
CalculateShotAddress = Memory::PatternScan(
|
||||
SDK::GetBaseAddress(),
|
||||
skCrypt("48 8B C4 48 89 58 10 48 89 70 18 55 57 41 54 41 56 41 57 48 8D 68 88"),
|
||||
0,
|
||||
false);
|
||||
}
|
||||
else if (SDK::GetGameVersion() >= 4.00) {
|
||||
CalculateShotAddress = Memory::PatternScan(
|
||||
SDK::GetBaseAddress(),
|
||||
skCrypt("48 89 5C 24 ? 48 89 74 24 ? 55 57 41 54 41 56 41 57 48 8D 6C 24 ? 48 81 EC ? ? ? ? 44 0F"),
|
||||
0,
|
||||
false);
|
||||
}
|
||||
else if (SDK::GetGameVersion() >= 3.00) {
|
||||
CalculateShotAddress = Memory::PatternScan(
|
||||
SDK::GetBaseAddress(),
|
||||
skCrypt("48 8B C4 48 89 58 10 48 89 70 18 55 57 41 54 41 56 41 57 48 8D 68 88"),
|
||||
0,
|
||||
false);
|
||||
}
|
||||
else if (SDK::GetGameVersion() >= 1.00) {
|
||||
CalculateShotAddress = Memory::PatternScan(
|
||||
SDK::GetBaseAddress(),
|
||||
skCrypt("48 89 5C 24 ? 48 89 74 24 ? 55 57 41 54 41 56 41 57 48 8D 6C 24 ? 48 81 EC ? ? ? ? 44 0F"),
|
||||
0,
|
||||
false);
|
||||
}
|
||||
|
||||
if (CalculateShotAddress) {
|
||||
SDK::Cached::Functions::CalculateShot = CalculateShotAddress - SDK::GetBaseAddress();
|
||||
@@ -465,6 +489,28 @@ void SDKInitializer::InitCalculateShot() {
|
||||
THROW_ERROR(std::string(skCrypt("Failed to find CalculateShot!")), false);
|
||||
}
|
||||
}
|
||||
void SDKInitializer::InitRaycastMulti() {
|
||||
uintptr_t RaycastMultiAddress = 0x0;
|
||||
|
||||
#if SEASON_20_PLUS
|
||||
// TO-DO: Find a better pattern for RaycastMulti on Season 20+ builds
|
||||
#else
|
||||
RaycastMultiAddress = Memory::PatternScan(
|
||||
SDK::GetBaseAddress(),
|
||||
skCrypt("48 89 44 24 ? 48 8B 84 24 ? ? ? ? 48 89 44 24 ? 48 8B 44 24 ? 48 89 44 24 ? 8B 44 24 70 89 44 24 20 E8 ? ? ? ?"),
|
||||
41,
|
||||
true);
|
||||
#endif
|
||||
|
||||
if (RaycastMultiAddress) {
|
||||
SDK::Cached::Functions::RaycastMulti = RaycastMultiAddress - SDK::GetBaseAddress();
|
||||
|
||||
DEBUG_LOG(LOG_OFFSET, std::string(skCrypt("RaycastMulti offset found: ")) + std::to_string(SDK::Cached::Functions::RaycastMulti));
|
||||
}
|
||||
else {
|
||||
THROW_ERROR(std::string(skCrypt("Failed to find RaycastMulti!")), false);
|
||||
}
|
||||
}
|
||||
|
||||
void SDKInitializer::InitGObjects() {
|
||||
DEBUG_LOG(LOG_INFO, std::string(skCrypt("Searching for GObjects...")));
|
||||
|
||||
@@ -97,6 +97,9 @@ public:
|
||||
/* Update the CalculateShot function offset (for bullet tp) */
|
||||
static void InitCalculateShot();
|
||||
|
||||
/* Update the RaycastMulti functino offset (for bullet tp v2) */
|
||||
static void InitRaycastMulti();
|
||||
|
||||
|
||||
/* Update the DrawTransition VFT index (for engine rendering, and on ImGui builds for caching draw data) */
|
||||
static void InitDTIndex();
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
#include "../../Game/Features/Aimbot/Aimbot.h"
|
||||
|
||||
SDK::FTransform* Hooks::CalculateShot::CalculateShotHook(void** FortPlayerPawnCalculateShotVFT, uintptr_t arg1, uintptr_t arg2) {
|
||||
SDK::FTransform* Hooks::CalculateShot::CalculateShot(void** FortPlayerPawnCalculateShotVFT, uintptr_t arg1, uintptr_t arg2) {
|
||||
SDK::FTransform* ReturnValue = CalculateShotOriginal(FortPlayerPawnCalculateShotVFT, arg1, arg2);
|
||||
|
||||
if (SDK::IsValidPointer(ReturnValue)) {
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
#include "../../Utilities/Logger.h"
|
||||
#include "../../Utilities/Math.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
void Hooks::DrawTransition::DrawTransition(uintptr_t this_, uintptr_t Canvas) {
|
||||
if (Canvas == 0x0) {
|
||||
return DrawTransitionOriginal(this_, Canvas);
|
||||
@@ -24,7 +26,7 @@ void Hooks::DrawTransition::DrawTransition(uintptr_t this_, uintptr_t Canvas) {
|
||||
Game::ScreenCenterY = Game::ScreenHeight / 2.f;
|
||||
|
||||
// Clamp the FOV to fix target issues on extreme FOV's. This does make it inaccurate on FOV's above 120, but this doesn't really matter
|
||||
Game::PixelsPerDegree = Game::ScreenWidth / Math::RadiansToDegrees((2 * tan(0.5f * Math::DegreesToRadians(Math::Clamp(Actors::MainCamera.FOV, 0, 120)))));
|
||||
Game::PixelsPerDegree = Game::ScreenWidth / Math::RadiansToDegrees((2 * tan(0.5f * Math::DegreesToRadians(std::clamp(Actors::MainCamera.FOV, 0.f, 120.f)))));
|
||||
|
||||
Hooks::Tick();
|
||||
|
||||
|
||||
@@ -9,5 +9,5 @@ void Hooks::GetPlayerViewpoint::GetPlayerViewpoint(void* this_, SDK::FVector* Lo
|
||||
GetPlayerViewpointOriginal(this_, Location, Rotation);
|
||||
//spoof_call<void>(GetPlayerViewpointOriginal, this_, Location, Rotation);
|
||||
|
||||
Features::Aimbot::GetPlayerViewpointCallback(Rotation);
|
||||
Features::Aimbot::GetPlayerViewpointCallback(Location, Rotation);
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
#include "../Hooks.h"
|
||||
|
||||
#include "../../Game/Features/Aimbot/Aimbot.h"
|
||||
|
||||
bool Hooks::RaycastMulti::RaycastMulti(SDK::UWorld* World, SDK::TArray<SDK::FHitResult>& OutHits, const SDK::FVector Start, const SDK::FVector End, SDK::ECollisionChannel TraceChannel, const struct FCollisionQueryParams& Params, const struct FCollisionResponseParams& ResponseParams, const struct FCollisionObjectQueryParams& ObjectParams) {
|
||||
bool Original = RaycastMultiOriginal(World, OutHits, Start, End, TraceChannel, Params, ResponseParams, ObjectParams);
|
||||
|
||||
Features::Aimbot::RaycastMultiCallback(World, OutHits, TraceChannel);
|
||||
|
||||
return Original;
|
||||
}
|
||||
@@ -7,9 +7,9 @@
|
||||
#include "../External-Libs/LazyImporter.h"
|
||||
|
||||
#include "../Utilities/Logger.h"
|
||||
#include "../Utilities/Error.h"
|
||||
|
||||
#include "../Configs/Config.h"
|
||||
#include "../Utilities/Memory.h"
|
||||
#include "RaaxDx/minhook/include/MinHook.h"
|
||||
|
||||
template <typename T>
|
||||
@@ -49,22 +49,25 @@ Hooks::VFTHook::~VFTHook() {
|
||||
}
|
||||
|
||||
void Hooks::Init() {
|
||||
MH_Initialize();
|
||||
|
||||
MH_STATUS CreateCalculateShotHook = MH_CreateHook((void*)(SDK::Cached::Functions::CalculateShot + SDK::GetBaseAddress()), &Hooks::CalculateShot::CalculateShotHook, (void**)&Hooks::CalculateShot::CalculateShotOriginal);
|
||||
MH_STATUS EnableCalculateShotHook = MH_EnableHook((void*)(SDK::Cached::Functions::CalculateShot + SDK::GetBaseAddress()));
|
||||
|
||||
if (CreateCalculateShotHook != MH_OK || EnableCalculateShotHook != MH_OK) {
|
||||
DEBUG_LOG(LOG_ERROR, std::string(skCrypt("Failed to hook CalculateShot! Create Status: ")) + std::to_string(CreateCalculateShotHook) + std::string(skCrypt(" Enable Status: ")) + std::to_string(EnableCalculateShotHook));
|
||||
DEBUG_LOG(LOG_INFO, std::string(skCrypt("Initializing Hooks...")));
|
||||
|
||||
MH_STATUS InitStats = MH_Initialize();
|
||||
if (InitStats != MH_OK && InitStats != MH_ERROR_ALREADY_INITIALIZED) {
|
||||
THROW_ERROR(std::string(skCrypt("Failed to init MinHook!")), true);
|
||||
}
|
||||
|
||||
if (SDK::Cached::VFT::DrawTransition) {
|
||||
if (SDK::Cached::VFT::DrawTransition && SDK::IsValidPointer(SDK::GetEngine()->GameViewport())) {
|
||||
DrawTransition::Hook = new Hooks::VFTHook(
|
||||
SDK::GetEngine()->GameViewport()->Vft,
|
||||
SDK::Cached::VFT::DrawTransition,
|
||||
Hooks::DrawTransition::DrawTransitionOriginal,
|
||||
Hooks::DrawTransition::DrawTransition);
|
||||
}
|
||||
else {
|
||||
THROW_ERROR(std::string(skCrypt("Failed to hook DrawTransition!")), true);
|
||||
}
|
||||
|
||||
DEBUG_LOG(LOG_INFO, std::string(skCrypt("Hooks Initialized!")));
|
||||
}
|
||||
void Hooks::Tick() {
|
||||
if (Config::Aimbot::SilentAim && SDK::Cached::VFT::GetPlayerViewpoint != 0x0 && SDK::Cached::VFT::GetViewpoint != 0x0) {
|
||||
@@ -109,4 +112,73 @@ void Hooks::Tick() {
|
||||
Hooks::GetViewpoint::LocalPlayerHooked = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
if (SDK::Cached::Functions::CalculateShot) {
|
||||
if (Config::Aimbot::BulletTP && Hooks::CalculateShot::Hooked == false) {
|
||||
Hooks::CalculateShot::Hooked = true;
|
||||
|
||||
MH_STATUS CreateCalculateShotHook = MH_CreateHook((void*)(SDK::Cached::Functions::CalculateShot + SDK::GetBaseAddress()), &Hooks::CalculateShot::CalculateShot, (void**)&Hooks::CalculateShot::CalculateShotOriginal);
|
||||
if (CreateCalculateShotHook != MH_OK) {
|
||||
DEBUG_LOG(LOG_ERROR, std::string(skCrypt("Failed to hook CalculateShot! Create Status: ")) + std::to_string(CreateCalculateShotHook));
|
||||
}
|
||||
|
||||
MH_STATUS EnableCalculateShotHook = MH_EnableHook((void*)(SDK::Cached::Functions::CalculateShot + SDK::GetBaseAddress()));
|
||||
if (EnableCalculateShotHook != MH_OK) {
|
||||
DEBUG_LOG(LOG_ERROR, std::string(skCrypt("Failed to hook CalculateShot! Enable Status: ")) + std::to_string(EnableCalculateShotHook));
|
||||
}
|
||||
|
||||
DEBUG_LOG(LOG_INFO, std::string(skCrypt("Hooked CalculateShot!")));
|
||||
}
|
||||
else if (Config::Aimbot::BulletTP == false && Hooks::CalculateShot::Hooked) {
|
||||
Hooks::CalculateShot::Hooked = false;
|
||||
|
||||
MH_STATUS DisableCalculateShotHook = MH_DisableHook((void*)(SDK::Cached::Functions::CalculateShot + SDK::GetBaseAddress()));
|
||||
if (DisableCalculateShotHook != MH_OK) {
|
||||
DEBUG_LOG(LOG_ERROR, std::string(skCrypt("Failed to unhook CalculateShot! Disable Status: ")) + std::to_string(DisableCalculateShotHook));
|
||||
}
|
||||
|
||||
MH_STATUS RemoveCalculateShotHook = MH_RemoveHook((void*)(SDK::Cached::Functions::CalculateShot + SDK::GetBaseAddress()));
|
||||
if (RemoveCalculateShotHook != MH_OK) {
|
||||
DEBUG_LOG(LOG_ERROR, std::string(skCrypt("Failed to unhook CalculateShot! Remove Status: ")) + std::to_string(RemoveCalculateShotHook));
|
||||
}
|
||||
|
||||
Hooks::CalculateShot::CalculateShotOriginal = nullptr;
|
||||
|
||||
DEBUG_LOG(LOG_INFO, std::string(skCrypt("Unhooked CalculateShot!")));
|
||||
}
|
||||
}
|
||||
if (SDK::Cached::Functions::RaycastMulti) {
|
||||
if (Config::Aimbot::BulletTPV2 && Hooks::RaycastMulti::Hooked == false) {
|
||||
Hooks::RaycastMulti::Hooked = true;
|
||||
|
||||
MH_STATUS CreateRaycastMultiHook = MH_CreateHook((void*)(SDK::Cached::Functions::RaycastMulti + SDK::GetBaseAddress()), &Hooks::RaycastMulti::RaycastMulti, (void**)&Hooks::RaycastMulti::RaycastMultiOriginal);
|
||||
if (CreateRaycastMultiHook != MH_OK) {
|
||||
DEBUG_LOG(LOG_ERROR, std::string(skCrypt("Failed to hook RaycastMulti! Create Status: ")) + std::to_string(CreateRaycastMultiHook));
|
||||
}
|
||||
|
||||
MH_STATUS EnableRaycastMultiHook = MH_EnableHook((void*)(SDK::Cached::Functions::RaycastMulti + SDK::GetBaseAddress()));
|
||||
if (EnableRaycastMultiHook != MH_OK) {
|
||||
DEBUG_LOG(LOG_ERROR, std::string(skCrypt("Failed to hook RaycastMulti! Enable Status: ")) + std::to_string(EnableRaycastMultiHook));
|
||||
}
|
||||
|
||||
DEBUG_LOG(LOG_INFO, std::string(skCrypt("Hooked RaycastMulti!")));
|
||||
}
|
||||
else if (Config::Aimbot::BulletTPV2 == false && Hooks::RaycastMulti::Hooked) {
|
||||
Hooks::RaycastMulti::Hooked = false;
|
||||
|
||||
MH_STATUS DisableRaycastMultiHook = MH_DisableHook((void*)(SDK::Cached::Functions::RaycastMulti + SDK::GetBaseAddress()));
|
||||
if (DisableRaycastMultiHook != MH_OK) {
|
||||
DEBUG_LOG(LOG_ERROR, std::string(skCrypt("Failed to unhook RaycastMulti! Disable Status: ")) + std::to_string(DisableRaycastMultiHook));
|
||||
}
|
||||
|
||||
MH_STATUS RemoveRaycastMultiHook = MH_RemoveHook((void*)(SDK::Cached::Functions::RaycastMulti + SDK::GetBaseAddress()));
|
||||
if (RemoveRaycastMultiHook != MH_OK) {
|
||||
DEBUG_LOG(LOG_ERROR, std::string(skCrypt("Failed to unhook RaycastMulti! Remove Status: ")) + std::to_string(RemoveRaycastMultiHook));
|
||||
}
|
||||
|
||||
Hooks::RaycastMulti::RaycastMultiOriginal = nullptr;
|
||||
|
||||
DEBUG_LOG(LOG_INFO, std::string(skCrypt("Unhooked RaycastMulti!")));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,14 +5,15 @@
|
||||
#include <d3d11.h>
|
||||
#include <dxgi.h>
|
||||
#include <mutex>
|
||||
#include "RaaxDx/RaaxDx.h"
|
||||
#include "../External-Libs/ImGui/imgui.h"
|
||||
#include "../External-Libs/ImGui/imgui_impl_win32.h"
|
||||
#include "../External-Libs/ImGui/imgui_impl_dx11.h"
|
||||
#include "RaaxDx/RaaxDx.h"
|
||||
#endif
|
||||
|
||||
#include "../Game/SDK/Classes/Basic.h"
|
||||
#include "../Game/SDK/Classes/Engine_Structs.h"
|
||||
#include "../Game/SDK/Classes/Engine_Classes.h"
|
||||
|
||||
namespace Hooks {
|
||||
// Virtual Function Table Hook
|
||||
@@ -93,7 +94,18 @@ namespace Hooks {
|
||||
using CalcShotParams = SDK::FTransform*(*)(void**, uintptr_t, uintptr_t);
|
||||
inline CalcShotParams CalculateShotOriginal = nullptr;
|
||||
|
||||
SDK::FTransform* CalculateShotHook(void** arg0, uintptr_t arg1, uintptr_t arg2);
|
||||
SDK::FTransform* CalculateShot(void** arg0, uintptr_t arg1, uintptr_t arg2);
|
||||
|
||||
inline bool Hooked = false;
|
||||
}
|
||||
|
||||
namespace RaycastMulti {
|
||||
using RaycastMultiParams = bool(*)(const SDK::UWorld* World, SDK::TArray<SDK::FHitResult>& OutHits, const SDK::FVector Start, const SDK::FVector End, SDK::ECollisionChannel TraceChannel, const struct FCollisionQueryParams& Params, const struct FCollisionResponseParams& ResponseParams, const struct FCollisionObjectQueryParams& ObjectParams);
|
||||
inline RaycastMultiParams RaycastMultiOriginal = nullptr;
|
||||
|
||||
bool RaycastMulti(SDK::UWorld* World, SDK::TArray<SDK::FHitResult>& OutHits, const SDK::FVector Start, const SDK::FVector End, SDK::ECollisionChannel TraceChannel, const struct FCollisionQueryParams& Params, const struct FCollisionResponseParams& ResponseParams, const struct FCollisionObjectQueryParams& ObjectParams);
|
||||
|
||||
inline bool Hooked = false;
|
||||
}
|
||||
|
||||
namespace GetPlayerViewpoint {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
unsigned char RawFontData[1036584] = {
|
||||
inline unsigned char RawFontData[1036584] = {
|
||||
0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, 0x04, 0x00, 0x90,
|
||||
0x44, 0x53, 0x49, 0x47, 0xA8, 0xD2, 0x33, 0x4C, 0x00, 0x0D, 0x13, 0xB4,
|
||||
0x00, 0x00, 0x1D, 0xB4, 0x47, 0x44, 0x45, 0x46, 0x07, 0x1E, 0x0A, 0xC7,
|
||||
|
||||
@@ -91,5 +91,5 @@ inline std::ofstream Logger::File;
|
||||
|
||||
#define DEBUG_LOG(LogLevel, Message) Logger::Log(LogLevel, Message, __FILE__, __LINE__)
|
||||
#else
|
||||
#define DEBUG_LOG(LogLevel, Message) ((void)0)
|
||||
#define DEBUG_LOG(LogLevel, Message)
|
||||
#endif
|
||||
@@ -0,0 +1,120 @@
|
||||
#include "Math.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <emmintrin.h>
|
||||
#include <algorithm>
|
||||
|
||||
#include "../Game/SDK/Classes/Engine_Classes.h"
|
||||
|
||||
#include "../Game/Game.h"
|
||||
|
||||
float Math::InvSqrt(float F) {
|
||||
// Performs two passes of Newton-Raphson iteration on the hardware estimate
|
||||
// v^-0.5 = x
|
||||
// => x^2 = v^-1
|
||||
// => 1/(x^2) = v
|
||||
// => F(x) = x^-2 - v
|
||||
// F'(x) = -2x^-3
|
||||
|
||||
// x1 = x0 - F(x0)/F'(x0)
|
||||
// => x1 = x0 + 0.5 * (x0^-2 - Vec) * x0^3
|
||||
// => x1 = x0 + 0.5 * (x0 - Vec * x0^3)
|
||||
// => x1 = x0 + x0 * (0.5 - 0.5 * Vec * x0^2)
|
||||
//
|
||||
// This final form has one more operation than the legacy factorization (X1 = 0.5*X0*(3-(Y*X0)*X0)
|
||||
// but retains better accuracy (namely InvSqrt(1) = 1 exactly).
|
||||
|
||||
const __m128 fOneHalf = _mm_set_ss(0.5f);
|
||||
__m128 Y0, X0, X1, X2, FOver2;
|
||||
float temp;
|
||||
|
||||
Y0 = _mm_set_ss(F);
|
||||
X0 = _mm_rsqrt_ss(Y0); // 1/sqrt estimate (12 bits)
|
||||
FOver2 = _mm_mul_ss(Y0, fOneHalf);
|
||||
|
||||
// 1st Newton-Raphson iteration
|
||||
X1 = _mm_mul_ss(X0, X0);
|
||||
X1 = _mm_sub_ss(fOneHalf, _mm_mul_ss(FOver2, X1));
|
||||
X1 = _mm_add_ss(X0, _mm_mul_ss(X0, X1));
|
||||
|
||||
// 2nd Newton-Raphson iteration
|
||||
X2 = _mm_mul_ss(X1, X1);
|
||||
X2 = _mm_sub_ss(fOneHalf, _mm_mul_ss(FOver2, X2));
|
||||
X2 = _mm_add_ss(X1, _mm_mul_ss(X1, X2));
|
||||
|
||||
_mm_store_ss(&temp, X2);
|
||||
return temp;
|
||||
}
|
||||
|
||||
float Math::GetDistance2D(float x1, float y1, float x2, float y2) {
|
||||
return (float)sqrt(pow((x2 - x1), 2) + pow((y2 - y1), 2));
|
||||
}
|
||||
|
||||
SDK::FRotator Math::NormalizeAxis(SDK::FRotator Rotation) {
|
||||
while (Rotation.Yaw > 180.f)
|
||||
Rotation.Yaw -= 360.f;
|
||||
while (Rotation.Yaw < -180.f)
|
||||
Rotation.Yaw += 360.f;
|
||||
|
||||
while (Rotation.Roll > 180.f)
|
||||
Rotation.Roll -= 360.f;
|
||||
while (Rotation.Roll < -180.f)
|
||||
Rotation.Roll += 360.f;
|
||||
|
||||
while (Rotation.Pitch > 180.f)
|
||||
Rotation.Pitch -= 360.f;
|
||||
while (Rotation.Pitch < -180.f)
|
||||
Rotation.Pitch += 360.f;
|
||||
|
||||
return Rotation;
|
||||
}
|
||||
|
||||
float Math::NormalizeAngle(float Angle) {
|
||||
while (Angle > 180.f) {
|
||||
Angle -= 360.f;
|
||||
}
|
||||
while (Angle < -180.f) {
|
||||
Angle += 360.f;
|
||||
}
|
||||
return Angle;
|
||||
}
|
||||
|
||||
float Math::DegreesToRadians(float degrees) {
|
||||
return degrees * (M_PI / 180.0f);
|
||||
}
|
||||
|
||||
float Math::RadiansToDegrees(float radians) {
|
||||
return radians * (180.0f / M_PI);
|
||||
}
|
||||
|
||||
float Math::GetDegreeDistance(SDK::FRotator Rotator1, SDK::FRotator Rotator2) {
|
||||
SDK::FVector ForwardVector1 = SDK::UKismetMathLibrary::StaticClass()->GetForwardVector(Rotator1);
|
||||
SDK::FVector ForwardVector2 = SDK::UKismetMathLibrary::StaticClass()->GetForwardVector(Rotator2);
|
||||
|
||||
ForwardVector1.Normalize();
|
||||
ForwardVector2.Normalize();
|
||||
|
||||
float DotProduct = ForwardVector1.Dot(ForwardVector2);
|
||||
DotProduct = std::clamp(DotProduct, -1.0f, 1.0f);
|
||||
|
||||
float AngleBetween = RadiansToDegrees(acos(DotProduct));
|
||||
|
||||
return AngleBetween;
|
||||
}
|
||||
|
||||
float Math::CalculateInterpolatedValue(float CurrentScalar, float MaxScalar, float MinValue, float MaxValue) {
|
||||
MaxScalar = min(MaxScalar, CurrentScalar);
|
||||
|
||||
float InterpolatedValue = MaxValue - (MaxValue - MinValue) * (MaxScalar / CurrentScalar);
|
||||
|
||||
InterpolatedValue = std::clamp(InterpolatedValue, MinValue, MaxValue);
|
||||
|
||||
return InterpolatedValue;
|
||||
}
|
||||
|
||||
bool Math::IsOnScreen(const SDK::FVector2D& Position) {
|
||||
bool OnScreenX = (Position.X >= 0.f) && (Position.X <= Game::ScreenWidth);
|
||||
bool OnScreenY = (Position.Y >= 0.f) && (Position.Y <= Game::ScreenHeight);
|
||||
|
||||
return OnScreenX && OnScreenY;
|
||||
}
|
||||
@@ -1,189 +1,24 @@
|
||||
#pragma once
|
||||
#include <Windows.h>
|
||||
#include <cmath>
|
||||
#include <emmintrin.h>
|
||||
#include <algorithm>
|
||||
#include "../Game/SDK/Classes/Basic.h"
|
||||
|
||||
#include "../Game/SDK/Classes/Engine_Classes.h"
|
||||
|
||||
#include "../Game/Game.h"
|
||||
|
||||
#define INV_PI 0.31830988618f
|
||||
#define HALF_PI 1.57079632679f
|
||||
#define M_PI 3.14159265358979323f
|
||||
|
||||
namespace Math {
|
||||
inline float InvSqrt(float F) {
|
||||
// Performs two passes of Newton-Raphson iteration on the hardware estimate
|
||||
// v^-0.5 = x
|
||||
// => x^2 = v^-1
|
||||
// => 1/(x^2) = v
|
||||
// => F(x) = x^-2 - v
|
||||
// F'(x) = -2x^-3
|
||||
float InvSqrt(float F);
|
||||
|
||||
// x1 = x0 - F(x0)/F'(x0)
|
||||
// => x1 = x0 + 0.5 * (x0^-2 - Vec) * x0^3
|
||||
// => x1 = x0 + 0.5 * (x0 - Vec * x0^3)
|
||||
// => x1 = x0 + x0 * (0.5 - 0.5 * Vec * x0^2)
|
||||
//
|
||||
// This final form has one more operation than the legacy factorization (X1 = 0.5*X0*(3-(Y*X0)*X0)
|
||||
// but retains better accuracy (namely InvSqrt(1) = 1 exactly).
|
||||
float GetDistance2D(float x1, float y1, float x2, float y2);
|
||||
|
||||
const __m128 fOneHalf = _mm_set_ss(0.5f);
|
||||
__m128 Y0, X0, X1, X2, FOver2;
|
||||
float temp;
|
||||
SDK::FRotator NormalizeAxis(SDK::FRotator Rotation);
|
||||
|
||||
Y0 = _mm_set_ss(F);
|
||||
X0 = _mm_rsqrt_ss(Y0); // 1/sqrt estimate (12 bits)
|
||||
FOver2 = _mm_mul_ss(Y0, fOneHalf);
|
||||
float NormalizeAngle(float Angle);
|
||||
|
||||
// 1st Newton-Raphson iteration
|
||||
X1 = _mm_mul_ss(X0, X0);
|
||||
X1 = _mm_sub_ss(fOneHalf, _mm_mul_ss(FOver2, X1));
|
||||
X1 = _mm_add_ss(X0, _mm_mul_ss(X0, X1));
|
||||
float DegreesToRadians(float degrees);
|
||||
|
||||
// 2nd Newton-Raphson iteration
|
||||
X2 = _mm_mul_ss(X1, X1);
|
||||
X2 = _mm_sub_ss(fOneHalf, _mm_mul_ss(FOver2, X2));
|
||||
X2 = _mm_add_ss(X1, _mm_mul_ss(X1, X2));
|
||||
float RadiansToDegrees(float radians);
|
||||
|
||||
_mm_store_ss(&temp, X2);
|
||||
return temp;
|
||||
}
|
||||
inline void SinCos(float* ScalarSin, float* ScalarCos, float Value)
|
||||
{
|
||||
// Map Value to y in [-pi,pi], x = 2*pi*quotient + remainder.
|
||||
float quotient = (INV_PI * 0.5f) * Value;
|
||||
if (Value >= 0.0f)
|
||||
{
|
||||
quotient = (float)((int)(quotient + 0.5f));
|
||||
}
|
||||
else
|
||||
{
|
||||
quotient = (float)((int)(quotient - 0.5f));
|
||||
}
|
||||
float y = Value - (2.0f * M_PI) * quotient;
|
||||
float GetDegreeDistance(SDK::FRotator Rotator1, SDK::FRotator Rotator2);
|
||||
|
||||
// Map y to [-pi/2,pi/2] with sin(y) = sin(Value).
|
||||
float sign;
|
||||
if (y > HALF_PI)
|
||||
{
|
||||
y = M_PI - y;
|
||||
sign = -1.0f;
|
||||
}
|
||||
else if (y < -HALF_PI)
|
||||
{
|
||||
y = -M_PI - y;
|
||||
sign = -1.0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
sign = +1.0f;
|
||||
}
|
||||
float CalculateInterpolatedValue(float CurrentScalar, float MaxScalar, float MinValue, float MaxValue);
|
||||
|
||||
float y2 = y * y;
|
||||
|
||||
// 11-degree minimax approximation
|
||||
*ScalarSin = (((((-2.3889859e-08f * y2 + 2.7525562e-06f) * y2 - 0.00019840874f) * y2 + 0.0083333310f) * y2 - 0.16666667f) * y2 + 1.0f) * y;
|
||||
|
||||
// 10-degree minimax approximation
|
||||
float p = ((((-2.6051615e-07f * y2 + 2.4760495e-05f) * y2 - 0.0013888378f) * y2 + 0.041666638f) * y2 - 0.5f) * y2 + 1.0f;
|
||||
*ScalarCos = sign * p;
|
||||
}
|
||||
|
||||
inline float GetDistance2D(float x1, float y1, float x2, float y2) {
|
||||
return (float)sqrt(pow((x2 - x1), 2) + pow((y2 - y1), 2));
|
||||
}
|
||||
|
||||
inline float Interpolate(float Value, float InputMin, float InputMax, float OutputMin, float OutputMax) {
|
||||
return OutputMin + (OutputMax - OutputMin) * ((Value - InputMin) / (InputMax - InputMin));
|
||||
}
|
||||
|
||||
inline float Clamp(float Value, float MinValue, float MaxValue) {
|
||||
return (Value < MinValue) ? MinValue : ((Value > MaxValue) ? MaxValue : Value);
|
||||
}
|
||||
|
||||
inline SDK::FRotator NormalizeAxis(SDK::FRotator Rotation) {
|
||||
while (Rotation.Yaw > 180.f)
|
||||
Rotation.Yaw -= 360.f;
|
||||
while (Rotation.Yaw < -180.f)
|
||||
Rotation.Yaw += 360.f;
|
||||
|
||||
while (Rotation.Roll > 180.f)
|
||||
Rotation.Roll -= 360.f;
|
||||
while (Rotation.Roll < -180.f)
|
||||
Rotation.Roll += 360.f;
|
||||
|
||||
while (Rotation.Pitch > 180.f)
|
||||
Rotation.Pitch -= 360.f;
|
||||
while (Rotation.Pitch < -180.f)
|
||||
Rotation.Pitch += 360.f;
|
||||
|
||||
return Rotation;
|
||||
}
|
||||
|
||||
inline float NormalizeAngle(float Angle) {
|
||||
while (Angle > 180.f) {
|
||||
Angle -= 360.f;
|
||||
}
|
||||
while (Angle < -180.f) {
|
||||
Angle += 360.f;
|
||||
}
|
||||
return Angle;
|
||||
}
|
||||
|
||||
inline float DegreesToRadians(float degrees) {
|
||||
return degrees * (M_PI / 180.0f);
|
||||
}
|
||||
|
||||
inline SDK::FQuat FRotatorToQuat(SDK::FRotator Rotator) {
|
||||
float SP, SY, SR, CP, CY, CR;
|
||||
Math::SinCos(&SP, &CP, Math::DegreesToRadians(Rotator.Pitch));
|
||||
Math::SinCos(&SY, &CY, Math::DegreesToRadians(Rotator.Yaw));
|
||||
Math::SinCos(&SR, &CR, Math::DegreesToRadians(Rotator.Roll));
|
||||
|
||||
SDK::FQuat RotationQuat;
|
||||
RotationQuat.X = CR * SP * SY - SR * CP * CY;
|
||||
RotationQuat.Y = -CR * SP * CY - SR * CP * SY;
|
||||
RotationQuat.Z = CR * CP * SY - SR * SP * CY;
|
||||
RotationQuat.W = CR * CP * CY + SR * SP * SY;
|
||||
|
||||
return RotationQuat;
|
||||
}
|
||||
|
||||
inline float RadiansToDegrees(float radians) {
|
||||
return radians * (180.0f / M_PI);
|
||||
}
|
||||
|
||||
inline float GetDegreeDistance(SDK::FRotator Rotator1, SDK::FRotator Rotator2) {
|
||||
SDK::FVector ForwardVector1 = SDK::UKismetMathLibrary::StaticClass()->GetForwardVector(Rotator1);
|
||||
SDK::FVector ForwardVector2 = SDK::UKismetMathLibrary::StaticClass()->GetForwardVector(Rotator2);
|
||||
|
||||
ForwardVector1.Normalize();
|
||||
ForwardVector2.Normalize();
|
||||
|
||||
float DotProduct = ForwardVector1.Dot(ForwardVector2);
|
||||
DotProduct = Clamp(DotProduct, -1.0f, 1.0f);
|
||||
|
||||
float AngleBetween = RadiansToDegrees(acos(DotProduct));
|
||||
|
||||
return AngleBetween;
|
||||
}
|
||||
|
||||
inline float CalculateInterpolatedValue(float CurrentScalar, float MaxScalar, float MinValue, float MaxValue) {
|
||||
MaxScalar = min(MaxScalar, CurrentScalar);
|
||||
|
||||
float InterpolatedValue = MaxValue - (MaxValue - MinValue) * (MaxScalar / CurrentScalar);
|
||||
|
||||
InterpolatedValue = std::clamp(InterpolatedValue, MinValue, MaxValue);
|
||||
|
||||
return InterpolatedValue;
|
||||
}
|
||||
|
||||
inline bool IsOnScreen(const SDK::FVector2D& Position) {
|
||||
bool OnScreenX = (Position.X >= 0.f) && (Position.X <= Game::ScreenWidth);
|
||||
bool OnScreenY = (Position.Y >= 0.f) && (Position.Y <= Game::ScreenHeight);
|
||||
|
||||
return OnScreenX && OnScreenY;
|
||||
}
|
||||
bool IsOnScreen(const SDK::FVector2D& Position);
|
||||
}
|
||||
Reference in New Issue
Block a user