diff --git a/Fortnite Internal/Configs/Config.h b/Fortnite Internal/Configs/Config.h
index ca996bb..237c00b 100644
--- a/Fortnite Internal/Configs/Config.h
+++ b/Fortnite Internal/Configs/Config.h
@@ -48,7 +48,7 @@ namespace Config {
namespace Standard {
inline bool Enabled = true;
inline float FOV = 20;
- inline float Smoothing = 8.f;
+ inline float Smoothing = 1.f;
}
namespace Weakspot {
diff --git a/Fortnite Internal/Entry.cpp b/Fortnite Internal/Entry.cpp
index 9b1a3e3..490ff31 100644
--- a/Fortnite Internal/Entry.cpp
+++ b/Fortnite Internal/Entry.cpp
@@ -14,7 +14,7 @@
// TO-DO:
// - Convert menu to a class (ONGOING)
// - Add a pickaxe check for weakspot aimbot
-// - Convert FOV size to camera degrees instead of pixelss
+// - Revert FOV back to pixels always, add option for disabling FOV circle entirely
// - Add a batch line processor for better line outlne handling
// - Fix struct offset grabbing not working on new UProperty handling
// - Add a proper config system
@@ -80,7 +80,7 @@ BOOL APIENTRY DllMain( HMODULE hModule,
)
{
ThisModule = hModule;
-
+
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
diff --git a/Fortnite Internal/Fortnite Internal.vcxproj b/Fortnite Internal/Fortnite Internal.vcxproj
index 22ce7ca..0b5a8a2 100644
--- a/Fortnite Internal/Fortnite Internal.vcxproj
+++ b/Fortnite Internal/Fortnite Internal.vcxproj
@@ -47,13 +47,13 @@
$(SolutionDir)\Build\$(Configuration)\
$(SolutionDir)\Build\$(Configuration)\Intermediates\
- $(ProjectName)15
+ $(ProjectName)21
true
$(SolutionDir)\Build\$(Configuration)\
$(SolutionDir)\Build\$(Configuration)\Intermediates\
- $(ProjectName)15
+ $(ProjectName)21
diff --git a/Fortnite Internal/Game/Actors/Loops/FortPawn.cpp b/Fortnite Internal/Game/Actors/Loops/FortPawn.cpp
index 75507ab..f1e4889 100644
--- a/Fortnite Internal/Game/Actors/Loops/FortPawn.cpp
+++ b/Fortnite Internal/Game/Actors/Loops/FortPawn.cpp
@@ -39,6 +39,7 @@ void Actors::FortPawn::Tick() {
}
if (CurrentPlayer.TeamIndex == LocalPawnCache.TeamIndex) continue;
+ if (CurrentPlayer.FortPawn->IsDying()) continue;
bool DidPopulate2D = Features::FortPawnHelper::PopulateBones(CurrentPlayer);
Features::FortPawnHelper::PopulateVisibilities(CurrentPlayer);
diff --git a/Fortnite Internal/Game/Game.cpp b/Fortnite Internal/Game/Game.cpp
index 56fcec2..e3b3d8f 100644
--- a/Fortnite Internal/Game/Game.cpp
+++ b/Fortnite Internal/Game/Game.cpp
@@ -61,12 +61,6 @@ void Game::DrawCallback() {
}
RaaxGUI::EndWindow();
- RaaxGUI::BeginWindow(skCrypt("Dummy Window").decrypt(), &test, RaaxGUI::RaaxGUIWindowFlags_None, SDK::FVector2D(rand() % 540, rand() % 540), SDK::FVector2D(rand() % 540, rand() % 540));
- RaaxGUI::EndWindow();
-
- RaaxGUI::BeginWindow(skCrypt("Dummy Window 2").decrypt(), &test, RaaxGUI::RaaxGUIWindowFlags_None, SDK::FVector2D(rand() % 540, rand() % 540), SDK::FVector2D(rand() % 540, rand() % 540));
- RaaxGUI::EndWindow();
-
RaaxGUI::EndFrame();
if (test) {
@@ -94,14 +88,32 @@ void Game::DrawCallback() {
}
if (Input::WasKeyJustReleased(Input::KeyName::Right)) {
- Config::Aimbot::Standard::Smoothing += 0.1f;
+ Config::Aimbot::Standard::Smoothing += 0.10f;
}
if (Input::WasKeyJustReleased(Input::KeyName::Left)) {
- Config::Aimbot::Standard::Smoothing -= 0.1f;
+ Config::Aimbot::Standard::Smoothing -= 0.10f;
+ }
+
+ if (Input::WasKeyJustReleased(Input::KeyName::Zero)) {
+ Config::Aimbot::CloseAim::Smoothing += 0.10f;
+ }
+ if (Input::WasKeyJustReleased(Input::KeyName::Nine)) {
+ Config::Aimbot::CloseAim::Smoothing -= 0.10f;
+ }
+
+ if (Input::WasKeyJustReleased(Input::KeyName::Eight)) {
+ Config::Aimbot::CloseAim::FOV += 10;
+ }
+ if (Input::WasKeyJustReleased(Input::KeyName::Seven)) {
+ Config::Aimbot::CloseAim::FOV -= 10;
}
Drawing::Text(std::to_string(Config::Aimbot::Standard::FOV).c_str(), SDK::FVector2D(100, 100), 16.f, SDK::FLinearColor(1.f, 1.f, 1.f, 1.f), true, true, true);
Drawing::Text(std::to_string(Config::Aimbot::Standard::Smoothing).c_str(), SDK::FVector2D(100, 120), 16.f, SDK::FLinearColor(1.f, 1.f, 1.f, 1.f), true, true, true);
- Drawing::Text(std::to_string(Actors::MainTarget.LocalInfo.DistanceFromCrosshairDegrees).c_str(), SDK::FVector2D(100, 150), 18.f, SDK::FLinearColor(1.f, 0.f, 0.f, 1.f), true, true, true);
- Drawing::Text(std::to_string(Actors::MainTarget.LocalInfo.CurrentFOVSizeDegrees).c_str(), SDK::FVector2D(100, 170), 18.f, SDK::FLinearColor(1.f, 1.f, 0.f, 1.f), true, true, true);
+
+ Drawing::Text(std::to_string(Config::Aimbot::CloseAim::FOV).c_str(), SDK::FVector2D(100, 140), 16.f, SDK::FLinearColor(1.f, 1.f, 1.f, 1.f), true, true, true);
+ Drawing::Text(std::to_string(Config::Aimbot::CloseAim::Smoothing).c_str(), SDK::FVector2D(100, 160), 16.f, SDK::FLinearColor(1.f, 1.f, 1.f, 1.f), true, true, true);
+
+ // Drawing::Text(std::to_string(Actors::MainTarget.LocalInfo.DistanceFromCrosshairDegrees).c_str(), SDK::FVector2D(100, 150), 18.f, SDK::FLinearColor(1.f, 0.f, 0.f, 1.f), true, true, true);
+ //Drawing::Text(std::to_string(Actors::MainTarget.LocalInfo.CurrentFOVSizeDegrees).c_str(), SDK::FVector2D(100, 170), 18.f, SDK::FLinearColor(1.f, 1.f, 0.f, 1.f), true, true, true);
}
\ No newline at end of file
diff --git a/Fortnite Internal/Game/Input/Input.cpp b/Fortnite Internal/Game/Input/Input.cpp
index 88b5e53..679d900 100644
--- a/Fortnite Internal/Game/Input/Input.cpp
+++ b/Fortnite Internal/Game/Input/Input.cpp
@@ -3,338 +3,178 @@
#include "../Game.h"
#include "../../Utilities/Logger.h"
-inline Input::KeysCache Input::Keys;
+inline std::unordered_map Input::Keys = {
+ { Input::KeyName::AnyKey, { SDK::FName(), skCrypt("Any Key").decrypt() } },
+
+ { Input::KeyName::MouseX, { SDK::FName(), skCrypt("Mouse X").decrypt() } },
+ { Input::KeyName::MouseY, { SDK::FName(), skCrypt("Mouse Y").decrypt() } },
+ { Input::KeyName::MouseScrollUp, { SDK::FName(), skCrypt("Scroll Up").decrypt() } },
+ { Input::KeyName::MouseScrollDown, { SDK::FName(), skCrypt("Scroll Down").decrypt() } },
+ { Input::KeyName::LeftMouseButton, { SDK::FName(), skCrypt("LMB").decrypt() } },
+ { Input::KeyName::RightMouseButton, { SDK::FName(), skCrypt("RMB").decrypt() } },
+ { Input::KeyName::MiddleMouseButton, { SDK::FName(), skCrypt("MMB").decrypt() } },
+ { Input::KeyName::ThumbMouseButton, { SDK::FName(), skCrypt("Thumb MB").decrypt() } },
+ { Input::KeyName::ThumbMouseButton2, { SDK::FName(), skCrypt("Thumb MB2").decrypt() } },
+
+ { Input::KeyName::BackSpace, { SDK::FName(), skCrypt("BackSpace").decrypt() } },
+ { Input::KeyName::Tab, { SDK::FName(), skCrypt("Tab").decrypt() } },
+ { Input::KeyName::Enter, { SDK::FName(), skCrypt("Enter").decrypt() } },
+ { Input::KeyName::Pause, { SDK::FName(), skCrypt("Pause").decrypt() } },
+ { Input::KeyName::CapsLock, { SDK::FName(), skCrypt("CapsLock").decrypt() } },
+ { Input::KeyName::Escape, { SDK::FName(), skCrypt("Escape").decrypt() } },
+ { Input::KeyName::SpaceBar, { SDK::FName(), skCrypt("Space").decrypt() } },
+ { Input::KeyName::PageUp, { SDK::FName(), skCrypt("PageUp").decrypt() } },
+ { Input::KeyName::PageDown, { SDK::FName(), skCrypt("PageDown").decrypt() } },
+ { Input::KeyName::End, { SDK::FName(), skCrypt("End").decrypt() } },
+ { Input::KeyName::Home, { SDK::FName(), skCrypt("Home").decrypt() } },
+
+ { Input::KeyName::Left, { SDK::FName(), skCrypt("Left Arrow").decrypt() } },
+ { Input::KeyName::Up, { SDK::FName(), skCrypt("Up Arrow").decrypt() } },
+ { Input::KeyName::Right, { SDK::FName(), skCrypt("Right Arrow").decrypt() } },
+ { Input::KeyName::Down, { SDK::FName(), skCrypt("Down Arrow").decrypt() } },
+
+ { Input::KeyName::Insert, { SDK::FName(), skCrypt("Insert").decrypt() } },
+ { Input::KeyName::Delete, { SDK::FName(), skCrypt("Delete").decrypt() } },
+
+ { Input::KeyName::Zero, { SDK::FName(), skCrypt("0").decrypt() } },
+ { Input::KeyName::One, { SDK::FName(), skCrypt("1").decrypt() } },
+ { Input::KeyName::Two, { SDK::FName(), skCrypt("2").decrypt() } },
+ { Input::KeyName::Three, { SDK::FName(), skCrypt("3").decrypt() } },
+ { Input::KeyName::Four, { SDK::FName(), skCrypt("4").decrypt() } },
+ { Input::KeyName::Five, { SDK::FName(), skCrypt("5").decrypt() } },
+ { Input::KeyName::Six, { SDK::FName(), skCrypt("6").decrypt() } },
+ { Input::KeyName::Seven, { SDK::FName(), skCrypt("7").decrypt() } },
+ { Input::KeyName::Eight, { SDK::FName(), skCrypt("8").decrypt() } },
+ { Input::KeyName::Nine, { SDK::FName(), skCrypt("9").decrypt() } },
+
+ { Input::KeyName::A, { SDK::FName(), skCrypt("A").decrypt() } },
+ { Input::KeyName::B, { SDK::FName(), skCrypt("B").decrypt() } },
+ { Input::KeyName::C, { SDK::FName(), skCrypt("C").decrypt() } },
+ { Input::KeyName::D, { SDK::FName(), skCrypt("D").decrypt() } },
+ { Input::KeyName::E, { SDK::FName(), skCrypt("E").decrypt() } },
+ { Input::KeyName::F, { SDK::FName(), skCrypt("F").decrypt() } },
+ { Input::KeyName::G, { SDK::FName(), skCrypt("G").decrypt() } },
+ { Input::KeyName::H, { SDK::FName(), skCrypt("H").decrypt() } },
+ { Input::KeyName::I, { SDK::FName(), skCrypt("I").decrypt() } },
+ { Input::KeyName::J, { SDK::FName(), skCrypt("J").decrypt() } },
+ { Input::KeyName::K, { SDK::FName(), skCrypt("K").decrypt() } },
+ { Input::KeyName::L, { SDK::FName(), skCrypt("L").decrypt() } },
+ { Input::KeyName::M, { SDK::FName(), skCrypt("M").decrypt() } },
+ { Input::KeyName::N, { SDK::FName(), skCrypt("N").decrypt() } },
+ { Input::KeyName::O, { SDK::FName(), skCrypt("O").decrypt() } },
+ { Input::KeyName::P, { SDK::FName(), skCrypt("P").decrypt() } },
+ { Input::KeyName::Q, { SDK::FName(), skCrypt("Q").decrypt() } },
+ { Input::KeyName::R, { SDK::FName(), skCrypt("R").decrypt() } },
+ { Input::KeyName::S, { SDK::FName(), skCrypt("S").decrypt() } },
+ { Input::KeyName::T, { SDK::FName(), skCrypt("T").decrypt() } },
+ { Input::KeyName::U, { SDK::FName(), skCrypt("U").decrypt() } },
+ { Input::KeyName::V, { SDK::FName(), skCrypt("V").decrypt() } },
+ { Input::KeyName::W, { SDK::FName(), skCrypt("W").decrypt() } },
+ { Input::KeyName::X, { SDK::FName(), skCrypt("X").decrypt() } },
+ { Input::KeyName::Y, { SDK::FName(), skCrypt("Y").decrypt() } },
+ { Input::KeyName::Z, { SDK::FName(), skCrypt("Z").decrypt() } },
+
+ { Input::KeyName::NumPadZero, { SDK::FName(), skCrypt("NumPad 0").decrypt() } },
+ { Input::KeyName::NumPadOne, { SDK::FName(), skCrypt("NumPad 1").decrypt() } },
+ { Input::KeyName::NumPadTwo, { SDK::FName(), skCrypt("NumPad 2").decrypt() } },
+ { Input::KeyName::NumPadThree, { SDK::FName(), skCrypt("NumPad 3").decrypt() } },
+ { Input::KeyName::NumPadFour, { SDK::FName(), skCrypt("NumPad 4").decrypt() } },
+ { Input::KeyName::NumPadFive, { SDK::FName(), skCrypt("NumPad 5").decrypt() } },
+ { Input::KeyName::NumPadSix, { SDK::FName(), skCrypt("NumPad 6").decrypt() } },
+ { Input::KeyName::NumPadSeven, { SDK::FName(), skCrypt("NumPad 7").decrypt() } },
+ { Input::KeyName::NumPadEight, { SDK::FName(), skCrypt("NumPad 8").decrypt() } },
+ { Input::KeyName::NumPadNine, { SDK::FName(), skCrypt("NumPad 9").decrypt() } },
+
+ { Input::KeyName::Multiply, { SDK::FName(), skCrypt("Multiply").decrypt() } },
+ { Input::KeyName::Add, { SDK::FName(), skCrypt("Add").decrypt() } },
+ { Input::KeyName::Subtract, { SDK::FName(), skCrypt("Subtract").decrypt() } },
+ { Input::KeyName::Decimal, { SDK::FName(), skCrypt("Decimal").decrypt() } },
+ { Input::KeyName::Divide, { SDK::FName(), skCrypt("Divide").decrypt() } },
+
+ { Input::KeyName::F1, { SDK::FName(), skCrypt("F1").decrypt() } },
+ { Input::KeyName::F2, { SDK::FName(), skCrypt("F2").decrypt() } },
+ { Input::KeyName::F3, { SDK::FName(), skCrypt("F3").decrypt() } },
+ { Input::KeyName::F4, { SDK::FName(), skCrypt("F4").decrypt() } },
+ { Input::KeyName::F5, { SDK::FName(), skCrypt("F5").decrypt() } },
+ { Input::KeyName::F6, { SDK::FName(), skCrypt("F6").decrypt() } },
+ { Input::KeyName::F7, { SDK::FName(), skCrypt("F7").decrypt() } },
+ { Input::KeyName::F8, { SDK::FName(), skCrypt("F8").decrypt() } },
+ { Input::KeyName::F9, { SDK::FName(), skCrypt("F9").decrypt() } },
+ { Input::KeyName::F10, { SDK::FName(), skCrypt("F10").decrypt() } },
+ { Input::KeyName::F11, { SDK::FName(), skCrypt("F11").decrypt() } },
+ { Input::KeyName::F12, { SDK::FName(), skCrypt("F12").decrypt() } },
+
+ { Input::KeyName::NumLock, { SDK::FName(), skCrypt("NumLock").decrypt() } },
+ { Input::KeyName::ScrollLock, { SDK::FName(), skCrypt("ScrollLock").decrypt() } },
+ { Input::KeyName::LeftShift, { SDK::FName(), skCrypt("Left Shift").decrypt() } },
+ { Input::KeyName::RightShift, { SDK::FName(), skCrypt("Right Shift").decrypt() } },
+ { Input::KeyName::LeftControl, { SDK::FName(), skCrypt("Left Control").decrypt() } },
+ { Input::KeyName::RightControl, { SDK::FName(), skCrypt("Right Control").decrypt() } },
+ { Input::KeyName::LeftAlt, { SDK::FName(), skCrypt("Left Alt").decrypt() } },
+ { Input::KeyName::RightAlt, { SDK::FName(), skCrypt("Right Alt").decrypt() } },
+ { Input::KeyName::LeftCommand, { SDK::FName(), skCrypt("Left Command").decrypt() } },
+ { Input::KeyName::RightCommand, { SDK::FName(), skCrypt("Right Command").decrypt() } },
+ { Input::KeyName::Semicolon, { SDK::FName(), skCrypt("Semicolon").decrypt() } },
+ { Input::KeyName::Equals, { SDK::FName(), skCrypt("Equals").decrypt() } },
+ { Input::KeyName::Comma, { SDK::FName(), skCrypt("Comma").decrypt() } },
+ { Input::KeyName::Underscore, { SDK::FName(), skCrypt("Underscore").decrypt() } },
+ { Input::KeyName::Period, { SDK::FName(), skCrypt("Period").decrypt() } },
+ { Input::KeyName::Slash, { SDK::FName(), skCrypt("Slash").decrypt() } },
+ { Input::KeyName::Tilde, { SDK::FName(), skCrypt("Tilde").decrypt() } },
+ { Input::KeyName::LeftBracket, { SDK::FName(), skCrypt("Left Bracket").decrypt() } },
+ { Input::KeyName::Backslash, { SDK::FName(), skCrypt("Backslash").decrypt() } },
+ { Input::KeyName::RightBracket, { SDK::FName(), skCrypt("Right Bracket").decrypt() } },
+ { Input::KeyName::Quote, { SDK::FName(), skCrypt("Quote").decrypt() } },
+ { Input::KeyName::Asterix, { SDK::FName(), skCrypt("Asterix").decrypt() } },
+ { Input::KeyName::Ampersand, { SDK::FName(), skCrypt("Ampersand").decrypt() } },
+ { Input::KeyName::Caret, { SDK::FName(), skCrypt("Caret").decrypt() } },
+ { Input::KeyName::Dollar, { SDK::FName(), skCrypt("Dollar").decrypt() } },
+ { Input::KeyName::Exclamation, { SDK::FName(), skCrypt("Exclamation").decrypt() } },
+ { Input::KeyName::Colon, { SDK::FName(), skCrypt("Colon").decrypt() } },
+
+ { Input::KeyName::A_AccentGrave, { SDK::FName(), skCrypt("A Accent Grave").decrypt() } },
+ { Input::KeyName::E_AccentGrave, { SDK::FName(), skCrypt("E Accent Grave").decrypt() } },
+ { Input::KeyName::E_AccentAigu, { SDK::FName(), skCrypt("E Accent Aigu").decrypt() } },
+ { Input::KeyName::C_Cedille, { SDK::FName(), skCrypt("C Cedille").decrypt() } },
+
+ { Input::KeyName::Section, { SDK::FName(), skCrypt("Section").decrypt() } },
+
+ { Input::KeyName::Gamepad_LeftX, { SDK::FName(), skCrypt("Gamepad Left X").decrypt() } },
+ { Input::KeyName::Gamepad_LeftY, { SDK::FName(), skCrypt("Gamepad Left Y").decrypt() } },
+ { Input::KeyName::Gamepad_RightX, { SDK::FName(), skCrypt("Gamepad Right X").decrypt() } },
+ { Input::KeyName::Gamepad_RightY, { SDK::FName(), skCrypt("Gamepad Right Y").decrypt() } },
+
+ { Input::KeyName::Gamepad_LeftTriggerAxis, { SDK::FName(), skCrypt("Gamepad Left Trigger Axis").decrypt() } },
+ { Input::KeyName::Gamepad_RightTriggerAxis, { SDK::FName(), skCrypt("Gamepad Right Trigger Axis").decrypt() } },
+ { Input::KeyName::Gamepad_LeftThumbstick, { SDK::FName(), skCrypt("Gamepad Left Thumbstick").decrypt() } },
+ { Input::KeyName::Gamepad_RightThumbstick, { SDK::FName(), skCrypt("Gamepad Right Thumbstick").decrypt() } },
+ { Input::KeyName::Gamepad_Special_Left, { SDK::FName(), skCrypt("Gamepad Special Left").decrypt() } },
+ { Input::KeyName::Gamepad_Special_Left_X, { SDK::FName(), skCrypt("Gamepad Special Left X").decrypt() } },
+ { Input::KeyName::Gamepad_Special_Left_Y, { SDK::FName(), skCrypt("Gamepad Special Left Y").decrypt() } },
+ { Input::KeyName::Gamepad_Special_Right, { SDK::FName(), skCrypt("Gamepad Special Right").decrypt() } },
+ { Input::KeyName::Gamepad_FaceButton_Bottom, { SDK::FName(), skCrypt("Gamepad Face Button Bottom").decrypt() } },
+ { Input::KeyName::Gamepad_FaceButton_Right, { SDK::FName(), skCrypt("Gamepad Face Button Right").decrypt() } },
+ { Input::KeyName::Gamepad_FaceButton_Left, { SDK::FName(), skCrypt("Gamepad Face Button Left").decrypt() } },
+ { Input::KeyName::Gamepad_FaceButton_Top, { SDK::FName(), skCrypt("Gamepad Face Button Top").decrypt() } },
+ { Input::KeyName::Gamepad_LeftShoulder, { SDK::FName(), skCrypt("Gamepad Left Shoulder").decrypt() } },
+ { Input::KeyName::Gamepad_RightShoulder, { SDK::FName(), skCrypt("Gamepad Right Shoulder").decrypt() } },
+ { Input::KeyName::Gamepad_LeftTrigger, { SDK::FName(), skCrypt("Gamepad Left Trigger").decrypt() } },
+ { Input::KeyName::Gamepad_RightTrigger, { SDK::FName(), skCrypt("Gamepad Right Trigger").decrypt() } },
+ { Input::KeyName::Gamepad_DPad_Up, { SDK::FName(), skCrypt("Gamepad DPad Up").decrypt() } },
+ { Input::KeyName::Gamepad_DPad_Down, { SDK::FName(), skCrypt("Gamepad DPad Down").decrypt() } },
+ { Input::KeyName::Gamepad_DPad_Left, { SDK::FName(), skCrypt("Gamepad DPad Left").decrypt() } },
+ { Input::KeyName::Gamepad_DPad_Right, { SDK::FName(), skCrypt("Gamepad DPad Right").decrypt() } },
+ { Input::KeyName::Gamepad_LeftStick_Up, { SDK::FName(), skCrypt("Gamepad Leftstick Up").decrypt() } },
+ { Input::KeyName::Gamepad_LeftStick_Down, { SDK::FName(), skCrypt("Gamepad Leftstick Down").decrypt() } },
+ { Input::KeyName::Gamepad_LeftStick_Left, { SDK::FName(), skCrypt("Gamepad Leftstick Left").decrypt() } },
+ { Input::KeyName::Gamepad_LeftStick_Right, { SDK::FName(), skCrypt("Gamepad Leftstick Right").decrypt() } },
+ { Input::KeyName::Gamepad_RightStick_Up, { SDK::FName(), skCrypt("Gamepad Rightstick Up").decrypt() } },
+ { Input::KeyName::Gamepad_RightStick_Down, { SDK::FName(), skCrypt("Gamepad Rightstick Down").decrypt() } },
+ { Input::KeyName::Gamepad_RightStick_Left, { SDK::FName(), skCrypt("Gamepad Rightstick Left").decrypt() } },
+ { Input::KeyName::Gamepad_RightStick_Right, { SDK::FName(), skCrypt("Gamepad Rightstick Right").decrypt() } },
+};
inline Input::MouseCache Input::Mouse;
-Input::KeyData& Input::GetKeyData(KeyName Key) {
- switch (Key) {
- case Input::KeyName::AnyKey:
- return Input::Keys.AnyKey;
-
- case Input::KeyName::MouseX:
- return Input::Keys.MouseX;
- case Input::KeyName::MouseY:
- return Input::Keys.MouseY;
- case Input::KeyName::MouseScrollUp:
- return Input::Keys.MouseScrollUp;
- case Input::KeyName::MouseScrollDown:
- return Input::Keys.MouseScrollDown;
- case Input::KeyName::LeftMouseButton:
- return Input::Keys.LeftMouseButton;
- case Input::KeyName::RightMouseButton:
- return Input::Keys.RightMouseButton;
- case Input::KeyName::MiddleMouseButton:
- return Input::Keys.MiddleMouseButton;
- case Input::KeyName::ThumbMouseButton:
- return Input::Keys.ThumbMouseButton;
- case Input::KeyName::ThumbMouseButton2:
- return Input::Keys.ThumbMouseButton2;
-
- case Input::KeyName::BackSpace:
- return Input::Keys.BackSpace;
- case Input::KeyName::Tab:
- return Input::Keys.Tab;
- case Input::KeyName::Enter:
- return Input::Keys.Enter;
- case Input::KeyName::Pause:
- return Input::Keys.Pause;
- case Input::KeyName::CapsLock:
- return Input::Keys.CapsLock;
- case Input::KeyName::Escape:
- return Input::Keys.Escape;
- case Input::KeyName::SpaceBar:
- return Input::Keys.SpaceBar;
- case Input::KeyName::PageUp:
- return Input::Keys.PageUp;
- case Input::KeyName::PageDown:
- return Input::Keys.PageDown;
- case Input::KeyName::End:
- return Input::Keys.End;
- case Input::KeyName::Home:
- return Input::Keys.Home;
-
- case Input::KeyName::Left:
- return Input::Keys.Left;
- case Input::KeyName::Up:
- return Input::Keys.Up;
- case Input::KeyName::Right:
- return Input::Keys.Right;
- case Input::KeyName::Down:
- return Input::Keys.Down;
-
- case Input::KeyName::Insert:
- return Input::Keys.Insert;
- case Input::KeyName::Delete:
- return Input::Keys.Delete;
-
- case Input::KeyName::Zero:
- return Input::Keys.Zero;
- case Input::KeyName::One:
- return Input::Keys.One;
- case Input::KeyName::Two:
- return Input::Keys.Two;
- case Input::KeyName::Three:
- return Input::Keys.Three;
- case Input::KeyName::Four:
- return Input::Keys.Four;
- case Input::KeyName::Five:
- return Input::Keys.Five;
- case Input::KeyName::Six:
- return Input::Keys.Six;
- case Input::KeyName::Seven:
- return Input::Keys.Seven;
- case Input::KeyName::Eight:
- return Input::Keys.Eight;
- case Input::KeyName::Nine:
- return Input::Keys.Nine;
-
- case Input::KeyName::A:
- return Input::Keys.A;
- case Input::KeyName::B:
- return Input::Keys.B;
- case Input::KeyName::C:
- return Input::Keys.C;
- case Input::KeyName::D:
- return Input::Keys.D;
- case Input::KeyName::E:
- return Input::Keys.E;
- case Input::KeyName::F:
- return Input::Keys.F;
- case Input::KeyName::G:
- return Input::Keys.G;
- case Input::KeyName::H:
- return Input::Keys.H;
- case Input::KeyName::I:
- return Input::Keys.I;
- case Input::KeyName::J:
- return Input::Keys.J;
- case Input::KeyName::K:
- return Input::Keys.K;
- case Input::KeyName::L:
- return Input::Keys.L;
- case Input::KeyName::M:
- return Input::Keys.M;
- case Input::KeyName::N:
- return Input::Keys.N;
- case Input::KeyName::O:
- return Input::Keys.O;
- case Input::KeyName::P:
- return Input::Keys.P;
- case Input::KeyName::Q:
- return Input::Keys.Q;
- case Input::KeyName::R:
- return Input::Keys.R;
- case Input::KeyName::S:
- return Input::Keys.S;
- case Input::KeyName::T:
- return Input::Keys.T;
- case Input::KeyName::U:
- return Input::Keys.U;
- case Input::KeyName::V:
- return Input::Keys.V;
- case Input::KeyName::W:
- return Input::Keys.W;
- case Input::KeyName::X:
- return Input::Keys.X;
- case Input::KeyName::Y:
- return Input::Keys.Y;
- case Input::KeyName::Z:
- return Input::Keys.Z;
-
- case Input::KeyName::NumPadZero:
- return Input::Keys.NumPadZero;
- case Input::KeyName::NumPadOne:
- return Input::Keys.NumPadOne;
- case Input::KeyName::NumPadTwo:
- return Input::Keys.NumPadTwo;
- case Input::KeyName::NumPadThree:
- return Input::Keys.NumPadThree;
- case Input::KeyName::NumPadFour:
- return Input::Keys.NumPadFour;
- case Input::KeyName::NumPadFive:
- return Input::Keys.NumPadFive;
- case Input::KeyName::NumPadSix:
- return Input::Keys.NumPadSix;
- case Input::KeyName::NumPadSeven:
- return Input::Keys.NumPadSeven;
- case Input::KeyName::NumPadEight:
- return Input::Keys.NumPadEight;
- case Input::KeyName::NumPadNine:
- return Input::Keys.NumPadNine;
-
- case Input::KeyName::Multiply:
- return Input::Keys.Multiply;
- case Input::KeyName::Add:
- return Input::Keys.Add;
- case Input::KeyName::Subtract:
- return Input::Keys.Subtract;
- case Input::KeyName::Decimal:
- return Input::Keys.Decimal;
- case Input::KeyName::Divide:
- return Input::Keys.Divide;
-
- case Input::KeyName::F1:
- return Input::Keys.F1;
- case Input::KeyName::F2:
- return Input::Keys.F2;
- case Input::KeyName::F3:
- return Input::Keys.F3;
- case Input::KeyName::F4:
- return Input::Keys.F4;
- case Input::KeyName::F5:
- return Input::Keys.F5;
- case Input::KeyName::F6:
- return Input::Keys.F6;
- case Input::KeyName::F7:
- return Input::Keys.F7;
- case Input::KeyName::F8:
- return Input::Keys.F8;
- case Input::KeyName::F9:
- return Input::Keys.F9;
- case Input::KeyName::F10:
- return Input::Keys.F10;
- case Input::KeyName::F11:
- return Input::Keys.F11;
- case Input::KeyName::F12:
- return Input::Keys.F12;
-
- case Input::KeyName::NumLock:
- return Input::Keys.NumLock;
- case Input::KeyName::ScrollLock:
- return Input::Keys.ScrollLock;
- case Input::KeyName::LeftShift:
- return Input::Keys.LeftShift;
- case Input::KeyName::RightShift:
- return Input::Keys.RightShift;
- case Input::KeyName::LeftControl:
- return Input::Keys.LeftControl;
- case Input::KeyName::RightControl:
- return Input::Keys.RightControl;
- case Input::KeyName::LeftAlt:
- return Input::Keys.LeftAlt;
- case Input::KeyName::RightAlt:
- return Input::Keys.RightAlt;
- case Input::KeyName::LeftCommand:
- return Input::Keys.LeftCommand;
- case Input::KeyName::RightCommand:
- return Input::Keys.RightCommand;
- case Input::KeyName::Semicolon:
- return Input::Keys.Semicolon;
- case Input::KeyName::Equals:
- return Input::Keys.Equals;
- case Input::KeyName::Comma:
- return Input::Keys.Comma;
- case Input::KeyName::Underscore:
- return Input::Keys.Underscore;
- case Input::KeyName::Period:
- return Input::Keys.Period;
- case Input::KeyName::Slash:
- return Input::Keys.Slash;
- case Input::KeyName::Tilde:
- return Input::Keys.Tilde;
- case Input::KeyName::LeftBracket:
- return Input::Keys.LeftBracket;
- case Input::KeyName::Backslash:
- return Input::Keys.Backslash;
- case Input::KeyName::RightBracket:
- return Input::Keys.RightBracket;
- case Input::KeyName::Quote:
- return Input::Keys.Quote;
- case Input::KeyName::Asterix:
- return Input::Keys.Asterix;
- case Input::KeyName::Ampersand:
- return Input::Keys.Ampersand;
- case Input::KeyName::Caret:
- return Input::Keys.Caret;
- case Input::KeyName::Dollar:
- return Input::Keys.Dollar;
- case Input::KeyName::Exclamation:
- return Input::Keys.Exclamation;
- case Input::KeyName::Colon:
- return Input::Keys.Colon;
-
- case Input::KeyName::A_AccentGrave:
- return Input::Keys.A_AccentGrave;
- case Input::KeyName::E_AccentGrave:
- return Input::Keys.E_AccentGrave;
- case Input::KeyName::E_AccentAigu:
- return Input::Keys.E_AccentAigu;
- case Input::KeyName::C_Cedille:
- return Input::Keys.C_Cedille;
-
- case Input::KeyName::Section:
- return Input::Keys.Section;
-
- case Input::KeyName::Gamepad_LeftX:
- return Input::Keys.Gamepad_LeftX;
- case Input::KeyName::Gamepad_LeftY:
- return Input::Keys.Gamepad_LeftY;
- case Input::KeyName::Gamepad_RightX:
- return Input::Keys.Gamepad_RightX;
- case Input::KeyName::Gamepad_RightY:
- return Input::Keys.Gamepad_RightY;
- case Input::KeyName::Gamepad_LeftTriggerAxis:
- return Input::Keys.Gamepad_LeftTriggerAxis;
- case Input::KeyName::Gamepad_RightTriggerAxis:
- return Input::Keys.Gamepad_RightTriggerAxis;
- case Input::KeyName::Gamepad_LeftThumbstick:
- return Input::Keys.Gamepad_LeftThumbstick;
- case Input::KeyName::Gamepad_RightThumbstick:
- return Input::Keys.Gamepad_RightThumbstick;
- case Input::KeyName::Gamepad_Special_Left:
- return Input::Keys.Gamepad_Special_Left;
- case Input::KeyName::Gamepad_Special_Left_X:
- return Input::Keys.Gamepad_Special_Left_X;
- case Input::KeyName::Gamepad_Special_Left_Y:
- return Input::Keys.Gamepad_Special_Left_Y;
- case Input::KeyName::Gamepad_Special_Right:
- return Input::Keys.Gamepad_Special_Right;
- case Input::KeyName::Gamepad_FaceButton_Bottom:
- return Input::Keys.Gamepad_FaceButton_Bottom;
- case Input::KeyName::Gamepad_FaceButton_Right:
- return Input::Keys.Gamepad_FaceButton_Right;
- case Input::KeyName::Gamepad_FaceButton_Left:
- return Input::Keys.Gamepad_FaceButton_Left;
- case Input::KeyName::Gamepad_FaceButton_Top:
- return Input::Keys.Gamepad_FaceButton_Top;
- case Input::KeyName::Gamepad_LeftShoulder:
- return Input::Keys.Gamepad_LeftShoulder;
- case Input::KeyName::Gamepad_RightShoulder:
- return Input::Keys.Gamepad_RightShoulder;
- case Input::KeyName::Gamepad_LeftTrigger:
- return Input::Keys.Gamepad_LeftTrigger;
- case Input::KeyName::Gamepad_RightTrigger:
- return Input::Keys.Gamepad_RightTrigger;
- case Input::KeyName::Gamepad_DPad_Up:
- return Input::Keys.Gamepad_DPad_Up;
- case Input::KeyName::Gamepad_DPad_Down:
- return Input::Keys.Gamepad_DPad_Down;
- case Input::KeyName::Gamepad_DPad_Right:
- return Input::Keys.Gamepad_DPad_Right;
- case Input::KeyName::Gamepad_DPad_Left:
- return Input::Keys.Gamepad_DPad_Left;
- case Input::KeyName::Gamepad_LeftStick_Up:
- return Input::Keys.Gamepad_LeftStick_Up;
- case Input::KeyName::Gamepad_LeftStick_Down:
- return Input::Keys.Gamepad_LeftStick_Down;
- case Input::KeyName::Gamepad_LeftStick_Right:
- return Input::Keys.Gamepad_LeftStick_Right;
- case Input::KeyName::Gamepad_LeftStick_Left:
- return Input::Keys.Gamepad_LeftStick_Left;
- case Input::KeyName::Gamepad_RightStick_Up:
- return Input::Keys.Gamepad_RightStick_Up;
- case Input::KeyName::Gamepad_RightStick_Down:
- return Input::Keys.Gamepad_RightStick_Down;
- case Input::KeyName::Gamepad_RightStick_Right:
- return Input::Keys.Gamepad_RightStick_Right;
- case Input::KeyName::Gamepad_RightStick_Left:
- return Input::Keys.Gamepad_RightStick_Left;
-
- default:
- return Input::Keys.None;
- }
-}
-
SDK::FVector2D Input::GetMousePosition() {
if (Mouse.FrameUpdated != Game::CurrentFrame) {
Mouse.FrameUpdated = Game::CurrentFrame;
@@ -351,374 +191,259 @@ SDK::FVector2D Input::GetMousePosition() {
}
bool Input::IsKeyDown(KeyName Key) {
- KeyData& KeyData = GetKeyData(Key);
+ auto& KeyData = Keys[Key];
if (KeyData.IsDown.FrameUpdated != Game::CurrentFrame) {
KeyData.IsDown.FrameUpdated = Game::CurrentFrame;
- SDK::FKey Key{};
- Key.KeyName = KeyData.FName;
+ SDK::FKey FKey{};
+ FKey.KeyName = KeyData.FName;
- KeyData.IsDown.Value = SDK::GetLocalController()->IsInputKeyDown(Key);
+ KeyData.IsDown.Value = SDK::GetLocalController()->IsInputKeyDown(FKey);
}
return KeyData.IsDown.Value;
}
bool Input::WasKeyJustReleased(KeyName Key) {
- KeyData& KeyData = GetKeyData(Key);
+ auto& KeyData = Keys[Key];
if (KeyData.WasJustReleased.FrameUpdated != Game::CurrentFrame) {
KeyData.WasJustReleased.FrameUpdated = Game::CurrentFrame;
- SDK::FKey Key{};
- Key.KeyName = KeyData.FName;
+ SDK::FKey FKey{};
+ FKey.KeyName = KeyData.FName;
- KeyData.WasJustReleased.Value = SDK::GetLocalController()->WasInputKeyJustReleased(Key);
+ KeyData.WasJustReleased.Value = SDK::GetLocalController()->WasInputKeyJustReleased(FKey);
}
return KeyData.WasJustReleased.Value;
}
bool Input::WasKeyJustPressed(KeyName Key) {
- KeyData& KeyData = GetKeyData(Key);
+ auto& KeyData = Keys[Key];
if (KeyData.WasJustPressed.FrameUpdated != Game::CurrentFrame) {
KeyData.WasJustPressed.FrameUpdated = Game::CurrentFrame;
- SDK::FKey Key{};
- Key.KeyName = KeyData.FName;
+ SDK::FKey FKey{};
+ FKey.KeyName = KeyData.FName;
- KeyData.WasJustPressed.Value = SDK::GetLocalController()->WasInputKeyJustPressed(Key);
+ KeyData.WasJustPressed.Value = SDK::GetLocalController()->WasInputKeyJustPressed(FKey);
}
return KeyData.WasJustPressed.Value;
}
+std::vector Input::GetAllDownKeys() {
+ std::vector KeysDown{};
+
+ for (auto& Key : Keys) {
+ if (IsKeyDown(Key.first)) {
+ KeysDown.push_back(Key.first);
+ }
+ }
+
+ return KeysDown;
+}
+std::vector Input::GetAllJustReleasedKeys() {
+ std::vector KeysJustReleased{};
+
+ for (auto& Key : Keys) {
+ if (WasKeyJustReleased(Key.first)) {
+ KeysJustReleased.push_back(Key.first);
+ }
+ }
+
+ return KeysJustReleased;
+}
+std::vector Input::GetAllJustPressedKeys() {
+ std::vector KeysJustPressed{};
+
+ for (auto& Key : Keys) {
+ if (WasKeyJustPressed(Key.first)) {
+ KeysJustPressed.push_back(Key.first);
+ }
+ }
+
+ return KeysJustPressed;
+}
+
+std::string Input::GetKeyName(Input::KeyName Key) {
+ return Keys[Key].Name;
+}
+
void Input::Init() {
DEBUG_LOG(skCrypt("Initializing input system...").decrypt());
// Init KeyNames
{
- Keys.AnyKey.FName = SDK::FName(skCrypt(L"AnyKey").decrypt());
- Keys.AnyKey.Name = skCrypt("Any Key").decrypt();
+ Keys[KeyName::AnyKey].FName = SDK::FName(skCrypt(L"AnyKey").decrypt());
- Keys.MouseX.FName = SDK::FName(skCrypt(L"MouseX").decrypt());
- Keys.MouseX.Name = skCrypt("Mouse X").decrypt();
- Keys.MouseY.FName = SDK::FName(skCrypt(L"MouseY").decrypt());
- Keys.MouseY.Name = skCrypt("Mouse Y").decrypt();
- Keys.MouseScrollUp.FName = SDK::FName(skCrypt(L"MouseScrollUp").decrypt());
- Keys.MouseScrollUp.Name = skCrypt("Scroll Up").decrypt();
- Keys.MouseScrollDown.FName = SDK::FName(skCrypt(L"MouseScrollDown").decrypt());
- Keys.MouseScrollDown.Name = skCrypt("Scroll Down").decrypt();
- Keys.LeftMouseButton.FName = SDK::FName(skCrypt(L"LeftMouseButton").decrypt());
- Keys.LeftMouseButton.Name = skCrypt("LMB").decrypt();
- Keys.RightMouseButton.FName = SDK::FName(skCrypt(L"RightMouseButton").decrypt());
- Keys.RightMouseButton.Name = skCrypt("RMB").decrypt();
- Keys.MiddleMouseButton.FName = SDK::FName(skCrypt(L"MiddleMouseButton").decrypt());
- Keys.MiddleMouseButton.Name = skCrypt("MMB").decrypt();
- Keys.ThumbMouseButton.FName = SDK::FName(skCrypt(L"ThumbMouseButton").decrypt());
- Keys.ThumbMouseButton.Name = skCrypt("Thumb MB").decrypt();
- Keys.ThumbMouseButton2.FName = SDK::FName(skCrypt(L"ThumbMouseButton2").decrypt());
- Keys.ThumbMouseButton2.Name = skCrypt("Thumb MB2").decrypt();
+ Keys[KeyName::MouseX].FName = SDK::FName(skCrypt(L"MouseX").decrypt());
+ Keys[KeyName::MouseY].FName = SDK::FName(skCrypt(L"MouseY").decrypt());
+ Keys[KeyName::MouseScrollUp].FName = SDK::FName(skCrypt(L"MouseScrollUp").decrypt());
+ Keys[KeyName::MouseScrollDown].FName = SDK::FName(skCrypt(L"MouseScrollDown").decrypt());
+ Keys[KeyName::LeftMouseButton].FName = SDK::FName(skCrypt(L"LeftMouseButton").decrypt());
+ Keys[KeyName::RightMouseButton].FName = SDK::FName(skCrypt(L"RightMouseButton").decrypt());
+ Keys[KeyName::MiddleMouseButton].FName = SDK::FName(skCrypt(L"MiddleMouseButton").decrypt());
+ Keys[KeyName::ThumbMouseButton].FName = SDK::FName(skCrypt(L"ThumbMouseButton").decrypt());
+ Keys[KeyName::ThumbMouseButton2].FName = SDK::FName(skCrypt(L"ThumbMouseButton2").decrypt());
- Keys.BackSpace.FName = SDK::FName(skCrypt(L"BackSpace").decrypt());
- Keys.BackSpace.Name = skCrypt("BackSpace").decrypt();
- Keys.Tab.FName = SDK::FName(skCrypt(L"Tab").decrypt());
- Keys.Tab.Name = skCrypt("Tab").decrypt();
- Keys.Enter.FName = SDK::FName(skCrypt(L"Enter").decrypt());
- Keys.Enter.Name = skCrypt("Enter").decrypt();
- Keys.Pause.FName = SDK::FName(skCrypt(L"Pause").decrypt());
- Keys.Pause.Name = skCrypt("Pause").decrypt();
- Keys.CapsLock.FName = SDK::FName(skCrypt(L"CapsLock").decrypt());
- Keys.CapsLock.Name = skCrypt("CapsLock").decrypt();
- Keys.Escape.FName = SDK::FName(skCrypt(L"Escape").decrypt());
- Keys.Escape.Name = skCrypt("Escape").decrypt();
- Keys.SpaceBar.FName = SDK::FName(skCrypt(L"SpaceBar").decrypt());
- Keys.SpaceBar.Name = skCrypt("Space").decrypt();
- Keys.PageUp.FName = SDK::FName(skCrypt(L"PageUp").decrypt());
- Keys.PageUp.Name = skCrypt("PageUp").decrypt();
- Keys.PageDown.FName = SDK::FName(skCrypt(L"PageDown").decrypt());
- Keys.PageDown.Name = skCrypt("PageDown").decrypt();
- Keys.End.FName = SDK::FName(skCrypt(L"End").decrypt());
- Keys.End.Name = skCrypt("End").decrypt();
- Keys.Home.FName = SDK::FName(skCrypt(L"Home").decrypt());
- Keys.Home.Name = skCrypt("Home").decrypt();
+ Keys[KeyName::BackSpace].FName = SDK::FName(skCrypt(L"BackSpace").decrypt());
+ Keys[KeyName::Tab].FName = SDK::FName(skCrypt(L"Tab").decrypt());
+ Keys[KeyName::Enter].FName = SDK::FName(skCrypt(L"Enter").decrypt());
+ Keys[KeyName::Pause].FName = SDK::FName(skCrypt(L"Pause").decrypt());
+ Keys[KeyName::CapsLock].FName = SDK::FName(skCrypt(L"CapsLock").decrypt());
+ Keys[KeyName::Escape].FName = SDK::FName(skCrypt(L"Escape").decrypt());
+ Keys[KeyName::SpaceBar].FName = SDK::FName(skCrypt(L"SpaceBar").decrypt());
+ Keys[KeyName::PageUp].FName = SDK::FName(skCrypt(L"PageUp").decrypt());
+ Keys[KeyName::PageDown].FName = SDK::FName(skCrypt(L"PageDown").decrypt());
+ Keys[KeyName::End].FName = SDK::FName(skCrypt(L"End").decrypt());
+ Keys[KeyName::Home].FName = SDK::FName(skCrypt(L"Home").decrypt());
- Keys.Left.FName = SDK::FName(skCrypt(L"Left").decrypt());
- Keys.Left.Name = skCrypt("Left Arrow").decrypt();
- Keys.Up.FName = SDK::FName(skCrypt(L"Up").decrypt());
- Keys.Up.Name = skCrypt("Up Arrow").decrypt();
- Keys.Right.FName = SDK::FName(skCrypt(L"Right").decrypt());
- Keys.Right.Name = skCrypt("Right Arrow").decrypt();
- Keys.Down.FName = SDK::FName(skCrypt(L"Down").decrypt());
- Keys.Down.Name = skCrypt("Down Arrow").decrypt();
+ Keys[KeyName::Left].FName = SDK::FName(skCrypt(L"Left").decrypt());
+ Keys[KeyName::Up].FName = SDK::FName(skCrypt(L"Up").decrypt());
+ Keys[KeyName::Right].FName = SDK::FName(skCrypt(L"Right").decrypt());
+ Keys[KeyName::Down].FName = SDK::FName(skCrypt(L"Down").decrypt());
- Keys.Insert.FName = SDK::FName(skCrypt(L"Insert").decrypt());
- Keys.Insert.Name = skCrypt("Insert").decrypt();
- Keys.Delete.FName = SDK::FName(skCrypt(L"Delete").decrypt());
- Keys.Delete.Name = skCrypt("Delete").decrypt();
+ Keys[KeyName::Insert].FName = SDK::FName(skCrypt(L"Insert").decrypt());
+ Keys[KeyName::Delete].FName = SDK::FName(skCrypt(L"Delete").decrypt());
- Keys.Zero.FName = SDK::FName(skCrypt(L"Zero").decrypt());
- Keys.Zero.Name = skCrypt("0").decrypt();
- Keys.One.FName = SDK::FName(skCrypt(L"One").decrypt());
- Keys.One.Name = skCrypt("1").decrypt();
- Keys.Two.FName = SDK::FName(skCrypt(L"Two").decrypt());
- Keys.Two.Name = skCrypt("2").decrypt();
- Keys.Three.FName = SDK::FName(skCrypt(L"Three").decrypt());
- Keys.Three.Name = skCrypt("3").decrypt();
- Keys.Four.FName = SDK::FName(skCrypt(L"Four").decrypt());
- Keys.Four.Name = skCrypt("4").decrypt();
- Keys.Five.FName = SDK::FName(skCrypt(L"Five").decrypt());
- Keys.Five.Name = skCrypt("5").decrypt();
- Keys.Six.FName = SDK::FName(skCrypt(L"Six").decrypt());
- Keys.Six.Name = skCrypt("6").decrypt();
- Keys.Seven.FName = SDK::FName(skCrypt(L"Seven").decrypt());
- Keys.Seven.Name = skCrypt("7").decrypt();
- Keys.Eight.FName = SDK::FName(skCrypt(L"Eight").decrypt());
- Keys.Eight.Name = skCrypt("8").decrypt();
- Keys.Nine.FName = SDK::FName(skCrypt(L"Nine").decrypt());
- Keys.Nine.Name = skCrypt("9").decrypt();
+ Keys[KeyName::Zero].FName = SDK::FName(skCrypt(L"Zero").decrypt());
+ Keys[KeyName::One].FName = SDK::FName(skCrypt(L"One").decrypt());
+ Keys[KeyName::Two].FName = SDK::FName(skCrypt(L"Two").decrypt());
+ Keys[KeyName::Three].FName = SDK::FName(skCrypt(L"Three").decrypt());
+ Keys[KeyName::Four].FName = SDK::FName(skCrypt(L"Four").decrypt());
+ Keys[KeyName::Five].FName = SDK::FName(skCrypt(L"Five").decrypt());
+ Keys[KeyName::Six].FName = SDK::FName(skCrypt(L"Six").decrypt());
+ Keys[KeyName::Seven].FName = SDK::FName(skCrypt(L"Seven").decrypt());
+ Keys[KeyName::Eight].FName = SDK::FName(skCrypt(L"Eight").decrypt());
+ Keys[KeyName::Nine].FName = SDK::FName(skCrypt(L"Nine").decrypt());
- Keys.A.FName = SDK::FName(skCrypt(L"A").decrypt());
- Keys.A.Name = skCrypt("A").decrypt();
- Keys.B.FName = SDK::FName(skCrypt(L"B").decrypt());
- Keys.B.Name = skCrypt("B").decrypt();
- Keys.C.FName = SDK::FName(skCrypt(L"C").decrypt());
- Keys.C.Name = skCrypt("C").decrypt();
- Keys.D.FName = SDK::FName(skCrypt(L"D").decrypt());
- Keys.D.Name = skCrypt("D").decrypt();
- Keys.E.FName = SDK::FName(skCrypt(L"E").decrypt());
- Keys.E.Name = skCrypt("E").decrypt();
- Keys.F.FName = SDK::FName(skCrypt(L"F").decrypt());
- Keys.F.Name = skCrypt("F").decrypt();
- Keys.G.FName = SDK::FName(skCrypt(L"G").decrypt());
- Keys.G.Name = skCrypt("G").decrypt();
- Keys.H.FName = SDK::FName(skCrypt(L"H").decrypt());
- Keys.H.Name = skCrypt("H").decrypt();
- Keys.I.FName = SDK::FName(skCrypt(L"I").decrypt());
- Keys.I.Name = skCrypt("I").decrypt();
- Keys.J.FName = SDK::FName(skCrypt(L"J").decrypt());
- Keys.J.Name = skCrypt("J").decrypt();
- Keys.K.FName = SDK::FName(skCrypt(L"K").decrypt());
- Keys.K.Name = skCrypt("K").decrypt();
- Keys.L.FName = SDK::FName(skCrypt(L"L").decrypt());
- Keys.L.Name = skCrypt("L").decrypt();
- Keys.M.FName = SDK::FName(skCrypt(L"M").decrypt());
- Keys.M.Name = skCrypt("M").decrypt();
- Keys.N.FName = SDK::FName(skCrypt(L"N").decrypt());
- Keys.N.Name = skCrypt("N").decrypt();
- Keys.O.FName = SDK::FName(skCrypt(L"O").decrypt());
- Keys.O.Name = skCrypt("O").decrypt();
- Keys.P.FName = SDK::FName(skCrypt(L"P").decrypt());
- Keys.P.Name = skCrypt("P").decrypt();
- Keys.Q.FName = SDK::FName(skCrypt(L"Q").decrypt());
- Keys.Q.Name = skCrypt("Q").decrypt();
- Keys.R.FName = SDK::FName(skCrypt(L"R").decrypt());
- Keys.R.Name = skCrypt("R").decrypt();
- Keys.S.FName = SDK::FName(skCrypt(L"S").decrypt());
- Keys.S.Name = skCrypt("S").decrypt();
- Keys.T.FName = SDK::FName(skCrypt(L"T").decrypt());
- Keys.T.Name = skCrypt("T").decrypt();
- Keys.U.FName = SDK::FName(skCrypt(L"U").decrypt());
- Keys.U.Name = skCrypt("U").decrypt();
- Keys.V.FName = SDK::FName(skCrypt(L"V").decrypt());
- Keys.V.Name = skCrypt("V").decrypt();
- Keys.W.FName = SDK::FName(skCrypt(L"W").decrypt());
- Keys.W.Name = skCrypt("W").decrypt();
- Keys.X.FName = SDK::FName(skCrypt(L"X").decrypt());
- Keys.X.Name = skCrypt("X").decrypt();
- Keys.Y.FName = SDK::FName(skCrypt(L"Y").decrypt());
- Keys.Y.Name = skCrypt("Y").decrypt();
- Keys.Z.FName = SDK::FName(skCrypt(L"Z").decrypt());
- Keys.Z.Name = skCrypt("Z").decrypt();
+ Keys[KeyName::A].FName = SDK::FName(skCrypt(L"A").decrypt());
+ Keys[KeyName::B].FName = SDK::FName(skCrypt(L"B").decrypt());
+ Keys[KeyName::C].FName = SDK::FName(skCrypt(L"C").decrypt());
+ Keys[KeyName::D].FName = SDK::FName(skCrypt(L"D").decrypt());
+ Keys[KeyName::E].FName = SDK::FName(skCrypt(L"E").decrypt());
+ Keys[KeyName::F].FName = SDK::FName(skCrypt(L"F").decrypt());
+ Keys[KeyName::G].FName = SDK::FName(skCrypt(L"G").decrypt());
+ Keys[KeyName::H].FName = SDK::FName(skCrypt(L"H").decrypt());
+ Keys[KeyName::I].FName = SDK::FName(skCrypt(L"I").decrypt());
+ Keys[KeyName::J].FName = SDK::FName(skCrypt(L"J").decrypt());
+ Keys[KeyName::K].FName = SDK::FName(skCrypt(L"K").decrypt());
+ Keys[KeyName::L].FName = SDK::FName(skCrypt(L"L").decrypt());
+ Keys[KeyName::M].FName = SDK::FName(skCrypt(L"M").decrypt());
+ Keys[KeyName::N].FName = SDK::FName(skCrypt(L"N").decrypt());
+ Keys[KeyName::O].FName = SDK::FName(skCrypt(L"O").decrypt());
+ Keys[KeyName::P].FName = SDK::FName(skCrypt(L"P").decrypt());
+ Keys[KeyName::Q].FName = SDK::FName(skCrypt(L"Q").decrypt());
+ Keys[KeyName::R].FName = SDK::FName(skCrypt(L"R").decrypt());
+ Keys[KeyName::S].FName = SDK::FName(skCrypt(L"S").decrypt());
+ Keys[KeyName::T].FName = SDK::FName(skCrypt(L"T").decrypt());
+ Keys[KeyName::U].FName = SDK::FName(skCrypt(L"U").decrypt());
+ Keys[KeyName::V].FName = SDK::FName(skCrypt(L"V").decrypt());
+ Keys[KeyName::W].FName = SDK::FName(skCrypt(L"W").decrypt());
+ Keys[KeyName::X].FName = SDK::FName(skCrypt(L"X").decrypt());
+ Keys[KeyName::Y].FName = SDK::FName(skCrypt(L"Y").decrypt());
+ Keys[KeyName::Z].FName = SDK::FName(skCrypt(L"Z").decrypt());
- Keys.NumPadZero.FName = SDK::FName(skCrypt(L"NumPadZero").decrypt());
- Keys.NumPadZero.Name = skCrypt("Num0").decrypt();
- Keys.NumPadOne.FName = SDK::FName(skCrypt(L"NumPadOne").decrypt());
- Keys.NumPadOne.Name = skCrypt("Num1").decrypt();
- Keys.NumPadTwo.FName = SDK::FName(skCrypt(L"NumPadTwo").decrypt());
- Keys.NumPadTwo.Name = skCrypt("Num2").decrypt();
- Keys.NumPadThree.FName = SDK::FName(skCrypt(L"NumPadThree").decrypt());
- Keys.NumPadThree.Name = skCrypt("Num3").decrypt();
- Keys.NumPadFour.FName = SDK::FName(skCrypt(L"NumPadFour").decrypt());
- Keys.NumPadFour.Name = skCrypt("Num4").decrypt();
- Keys.NumPadFive.FName = SDK::FName(skCrypt(L"NumPadFive").decrypt());
- Keys.NumPadFive.Name = skCrypt("Num5").decrypt();
- Keys.NumPadSix.FName = SDK::FName(skCrypt(L"NumPadSix").decrypt());
- Keys.NumPadSix.Name = skCrypt("Num6").decrypt();
- Keys.NumPadSeven.FName = SDK::FName(skCrypt(L"NumPadSeven").decrypt());
- Keys.NumPadSeven.Name = skCrypt("Num7").decrypt();
- Keys.NumPadEight.FName = SDK::FName(skCrypt(L"NumPadEight").decrypt());
- Keys.NumPadEight.Name = skCrypt("Num8").decrypt();
- Keys.NumPadNine.FName = SDK::FName(skCrypt(L"NumPadNine").decrypt());
- Keys.NumPadNine.Name = skCrypt("Num9").decrypt();
+ Keys[KeyName::NumPadZero].FName = SDK::FName(skCrypt(L"NumPadZero").decrypt());
+ Keys[KeyName::NumPadOne].FName = SDK::FName(skCrypt(L"NumPadOne").decrypt());
+ Keys[KeyName::NumPadTwo].FName = SDK::FName(skCrypt(L"NumPadTwo").decrypt());
+ Keys[KeyName::NumPadThree].FName = SDK::FName(skCrypt(L"NumPadThree").decrypt());
+ Keys[KeyName::NumPadFour].FName = SDK::FName(skCrypt(L"NumPadFour").decrypt());
+ Keys[KeyName::NumPadFive].FName = SDK::FName(skCrypt(L"NumPadFive").decrypt());
+ Keys[KeyName::NumPadSix].FName = SDK::FName(skCrypt(L"NumPadSix").decrypt());
+ Keys[KeyName::NumPadSeven].FName = SDK::FName(skCrypt(L"NumPadSeven").decrypt());
+ Keys[KeyName::NumPadEight].FName = SDK::FName(skCrypt(L"NumPadEight").decrypt());
+ Keys[KeyName::NumPadNine].FName = SDK::FName(skCrypt(L"NumPadNine").decrypt());
- Keys.Multiply.FName = SDK::FName(skCrypt(L"Multiply").decrypt());
- Keys.Multiply.Name = skCrypt("Multiply").decrypt();
- Keys.Add.FName = SDK::FName(skCrypt(L"Add").decrypt());
- Keys.Add.Name = skCrypt("Add").decrypt();
- Keys.Subtract.FName = SDK::FName(skCrypt(L"Subtract").decrypt());
- Keys.Subtract.Name = skCrypt("Subtract").decrypt();
- Keys.Decimal.FName = SDK::FName(skCrypt(L"Decimal").decrypt());
- Keys.Decimal.Name = skCrypt("Decimal").decrypt();
- Keys.Divide.FName = SDK::FName(skCrypt(L"Divide").decrypt());
- Keys.Divide.Name = skCrypt("Divide").decrypt();
+ Keys[KeyName::Multiply].FName = SDK::FName(skCrypt(L"Multiply").decrypt());
+ Keys[KeyName::Add].FName = SDK::FName(skCrypt(L"Add").decrypt());
+ Keys[KeyName::Subtract].FName = SDK::FName(skCrypt(L"Subtract").decrypt());
+ Keys[KeyName::Decimal].FName = SDK::FName(skCrypt(L"Decimal").decrypt());
+ Keys[KeyName::Divide].FName = SDK::FName(skCrypt(L"Divide").decrypt());
- Keys.F1.FName = SDK::FName(skCrypt(L"F1").decrypt());
- Keys.F1.Name = skCrypt("F1").decrypt();
- Keys.F2.FName = SDK::FName(skCrypt(L"F2").decrypt());
- Keys.F2.Name = skCrypt("F2").decrypt();
- Keys.F3.FName = SDK::FName(skCrypt(L"F3").decrypt());
- Keys.F3.Name = skCrypt("F3").decrypt();
- Keys.F4.FName = SDK::FName(skCrypt(L"F4").decrypt());
- Keys.F4.Name = skCrypt("F4").decrypt();
- Keys.F5.FName = SDK::FName(skCrypt(L"F5").decrypt());
- Keys.F5.Name = skCrypt("F5").decrypt();
- Keys.F6.FName = SDK::FName(skCrypt(L"F6").decrypt());
- Keys.F6.Name = skCrypt("F6").decrypt();
- Keys.F7.FName = SDK::FName(skCrypt(L"F7").decrypt());
- Keys.F7.Name = skCrypt("F7").decrypt();
- Keys.F8.FName = SDK::FName(skCrypt(L"F8").decrypt());
- Keys.F8.Name = skCrypt("F8").decrypt();
- Keys.F9.FName = SDK::FName(skCrypt(L"F9").decrypt());
- Keys.F9.Name = skCrypt("F9").decrypt();
- Keys.F10.FName = SDK::FName(skCrypt(L"F10").decrypt());
- Keys.F10.Name = skCrypt("F10").decrypt();
- Keys.F11.FName = SDK::FName(skCrypt(L"F11").decrypt());
- Keys.F11.Name = skCrypt("F11").decrypt();
- Keys.F12.FName = SDK::FName(skCrypt(L"F12").decrypt());
- Keys.F12.Name = skCrypt("F12").decrypt();
+ Keys[KeyName::F1].FName = SDK::FName(skCrypt(L"F1").decrypt());
+ Keys[KeyName::F2].FName = SDK::FName(skCrypt(L"F2").decrypt());
+ Keys[KeyName::F3].FName = SDK::FName(skCrypt(L"F3").decrypt());
+ Keys[KeyName::F4].FName = SDK::FName(skCrypt(L"F4").decrypt());
+ Keys[KeyName::F5].FName = SDK::FName(skCrypt(L"F5").decrypt());
+ Keys[KeyName::F6].FName = SDK::FName(skCrypt(L"F6").decrypt());
+ Keys[KeyName::F7].FName = SDK::FName(skCrypt(L"F7").decrypt());
+ Keys[KeyName::F8].FName = SDK::FName(skCrypt(L"F8").decrypt());
+ Keys[KeyName::F9].FName = SDK::FName(skCrypt(L"F9").decrypt());
+ Keys[KeyName::F10].FName = SDK::FName(skCrypt(L"F10").decrypt());
+ Keys[KeyName::F11].FName = SDK::FName(skCrypt(L"F11").decrypt());
+ Keys[KeyName::F12].FName = SDK::FName(skCrypt(L"F12").decrypt());
- Keys.NumLock.FName = SDK::FName(skCrypt(L"NumLock").decrypt());
- Keys.NumLock.Name = skCrypt("NumLock").decrypt();
- Keys.ScrollLock.FName = SDK::FName(skCrypt(L"ScrollLock").decrypt());
- Keys.ScrollLock.Name = skCrypt("ScrollLock").decrypt();
- Keys.LeftShift.FName = SDK::FName(skCrypt(L"LeftShift").decrypt());
- Keys.LeftShift.Name = skCrypt("LShift").decrypt();
- Keys.RightShift.FName = SDK::FName(skCrypt(L"RightShift").decrypt());
- Keys.RightShift.Name = skCrypt("RShift").decrypt();
- Keys.LeftControl.FName = SDK::FName(skCrypt(L"LeftControl").decrypt());
- Keys.LeftControl.Name = skCrypt("LCtrl").decrypt();
- Keys.RightControl.FName = SDK::FName(skCrypt(L"RightControl").decrypt());
- Keys.RightControl.Name = skCrypt("RCtrl").decrypt();
- Keys.LeftAlt.FName = SDK::FName(skCrypt(L"LeftAlt").decrypt());
- Keys.LeftAlt.Name = skCrypt("LAlt").decrypt();
- Keys.RightAlt.FName = SDK::FName(skCrypt(L"RightAlt").decrypt());
- Keys.RightAlt.Name = skCrypt("RAlt").decrypt();
- Keys.LeftCommand.FName = SDK::FName(skCrypt(L"LeftCommand").decrypt());
- Keys.LeftCommand.Name = skCrypt("LCmd").decrypt();
- Keys.RightCommand.FName = SDK::FName(skCrypt(L"RightCommand").decrypt());
- Keys.RightCommand.Name = skCrypt("RCmd").decrypt();
- Keys.Semicolon.FName = SDK::FName(skCrypt(L"Semicolon").decrypt());
- Keys.Semicolon.Name = skCrypt("Semicolon").decrypt();
- Keys.Equals.FName = SDK::FName(skCrypt(L"Equals").decrypt());
- Keys.Equals.Name = skCrypt("Equals").decrypt();
- Keys.Comma.FName = SDK::FName(skCrypt(L"Comma").decrypt());
- Keys.Comma.Name = skCrypt("Comma").decrypt();
- Keys.Underscore.FName = SDK::FName(skCrypt(L"Underscore").decrypt());
- Keys.Underscore.Name = skCrypt("Underscore").decrypt();
- Keys.Period.FName = SDK::FName(skCrypt(L"Period").decrypt());
- Keys.Period.Name = skCrypt("Period").decrypt();
- Keys.Slash.FName = SDK::FName(skCrypt(L"Slash").decrypt());
- Keys.Slash.Name = skCrypt("Slash").decrypt();
- Keys.Tilde.FName = SDK::FName(skCrypt(L"Tilde").decrypt());
- Keys.Tilde.Name = skCrypt("Tilde").decrypt();
- Keys.LeftBracket.FName = SDK::FName(skCrypt(L"LeftBracket").decrypt());
- Keys.LeftBracket.Name = skCrypt("LBracket").decrypt();
- Keys.Backslash.FName = SDK::FName(skCrypt(L"Backslash").decrypt());
- Keys.Backslash.Name = skCrypt("Backslash").decrypt();
- Keys.RightBracket.FName = SDK::FName(skCrypt(L"RightBracket").decrypt());
- Keys.RightBracket.Name = skCrypt("RBracket").decrypt();
- Keys.Quote.FName = SDK::FName(skCrypt(L"Quote").decrypt());
- Keys.Quote.Name = skCrypt("Quote").decrypt();
- Keys.Asterix.FName = SDK::FName(skCrypt(L"Asterix").decrypt());
- Keys.Asterix.Name = skCrypt("Asterix").decrypt();
- Keys.Ampersand.FName = SDK::FName(skCrypt(L"Ampersand").decrypt());
- Keys.Ampersand.Name = skCrypt("Ampersand").decrypt();
- Keys.Caret.FName = SDK::FName(skCrypt(L"Caret").decrypt());
- Keys.Caret.Name = skCrypt("Caret").decrypt();
- Keys.Dollar.FName = SDK::FName(skCrypt(L"Dollar").decrypt());
- Keys.Dollar.Name = skCrypt("Dollar").decrypt();
- Keys.Exclamation.FName = SDK::FName(skCrypt(L"Exclamation").decrypt());
- Keys.Exclamation.Name = skCrypt("Exclamation").decrypt();
- Keys.Colon.FName = SDK::FName(skCrypt(L"Colon").decrypt());
- Keys.Colon.Name = skCrypt("Colon").decrypt();
+ Keys[KeyName::NumLock].FName = SDK::FName(skCrypt(L"NumLock").decrypt());
+ Keys[KeyName::ScrollLock].FName = SDK::FName(skCrypt(L"ScrollLock").decrypt());
+ Keys[KeyName::LeftShift].FName = SDK::FName(skCrypt(L"LeftShift").decrypt());
+ Keys[KeyName::RightShift].FName = SDK::FName(skCrypt(L"RightShift").decrypt());
+ Keys[KeyName::LeftControl].FName = SDK::FName(skCrypt(L"LeftControl").decrypt());
+ Keys[KeyName::RightControl].FName = SDK::FName(skCrypt(L"RightControl").decrypt());
+ Keys[KeyName::LeftAlt].FName = SDK::FName(skCrypt(L"LeftAlt").decrypt());
+ Keys[KeyName::RightAlt].FName = SDK::FName(skCrypt(L"RightAlt").decrypt());
+ Keys[KeyName::LeftCommand].FName = SDK::FName(skCrypt(L"LeftCommand").decrypt());
+ Keys[KeyName::RightCommand].FName = SDK::FName(skCrypt(L"RightCommand").decrypt());
+ Keys[KeyName::Semicolon].FName = SDK::FName(skCrypt(L"Semicolon").decrypt());
+ Keys[KeyName::Equals].FName = SDK::FName(skCrypt(L"Equals").decrypt());
+ Keys[KeyName::Comma].FName = SDK::FName(skCrypt(L"Comma").decrypt());
+ Keys[KeyName::Underscore].FName = SDK::FName(skCrypt(L"Underscore").decrypt());
+ Keys[KeyName::Period].FName = SDK::FName(skCrypt(L"Period").decrypt());
+ Keys[KeyName::Slash].FName = SDK::FName(skCrypt(L"Slash").decrypt());
+ Keys[KeyName::Tilde].FName = SDK::FName(skCrypt(L"Tilde").decrypt());
+ Keys[KeyName::LeftBracket].FName = SDK::FName(skCrypt(L"LeftBracket").decrypt());
+ Keys[KeyName::Backslash].FName = SDK::FName(skCrypt(L"Backslash").decrypt());
+ Keys[KeyName::RightBracket].FName = SDK::FName(skCrypt(L"RightBracket").decrypt());
+ Keys[KeyName::Quote].FName = SDK::FName(skCrypt(L"Quote").decrypt());
+ Keys[KeyName::Asterix].FName = SDK::FName(skCrypt(L"Asterix").decrypt());
+ Keys[KeyName::Ampersand].FName = SDK::FName(skCrypt(L"Ampersand").decrypt());
+ Keys[KeyName::Caret].FName = SDK::FName(skCrypt(L"Caret").decrypt());
+ Keys[KeyName::Dollar].FName = SDK::FName(skCrypt(L"Dollar").decrypt());
+ Keys[KeyName::Exclamation].FName = SDK::FName(skCrypt(L"Exclamation").decrypt());
+ Keys[KeyName::Colon].FName = SDK::FName(skCrypt(L"Colon").decrypt());
- Keys.A_AccentGrave.FName = SDK::FName(skCrypt(L"A_AccentGrave").decrypt());
- Keys.A_AccentGrave.Name = skCrypt("A_Grave").decrypt();
- Keys.E_AccentGrave.FName = SDK::FName(skCrypt(L"E_AccentGrave").decrypt());
- Keys.E_AccentGrave.Name = skCrypt("E_Grave").decrypt();
- Keys.E_AccentAigu.FName = SDK::FName(skCrypt(L"E_AccentAigu").decrypt());
- Keys.E_AccentAigu.Name = skCrypt("E_Aigu").decrypt();
- Keys.C_Cedille.FName = SDK::FName(skCrypt(L"C_Cedille").decrypt());
- Keys.C_Cedille.Name = skCrypt("C_Cedille").decrypt();
+ Keys[KeyName::A_AccentGrave].FName = SDK::FName(skCrypt(L"A_AccentGrave").decrypt());
+ Keys[KeyName::E_AccentGrave].FName = SDK::FName(skCrypt(L"E_AccentGrave").decrypt());
+ Keys[KeyName::E_AccentAigu].FName = SDK::FName(skCrypt(L"E_AccentAigu").decrypt());
+ Keys[KeyName::C_Cedille].FName = SDK::FName(skCrypt(L"C_Cedille").decrypt());
- Keys.Section.FName = SDK::FName(skCrypt(L"Section").decrypt());
- Keys.Section.Name = skCrypt("Section").decrypt();
+ Keys[KeyName::Section].FName = SDK::FName(skCrypt(L"Section").decrypt());
- Keys.Gamepad_LeftX.FName = SDK::FName(skCrypt(L"Gamepad_LeftX").decrypt());
- Keys.Gamepad_LeftX.Name = skCrypt("Gamepad_LeftX").decrypt();
- Keys.Gamepad_LeftY.FName = SDK::FName(skCrypt(L"Gamepad_LeftY").decrypt());
- Keys.Gamepad_LeftY.Name = skCrypt("Gamepad_LeftY").decrypt();
- Keys.Gamepad_RightX.FName = SDK::FName(skCrypt(L"Gamepad_RightX").decrypt());
- Keys.Gamepad_RightX.Name = skCrypt("Gamepad_RightX").decrypt();
- Keys.Gamepad_RightY.FName = SDK::FName(skCrypt(L"Gamepad_RightY").decrypt());
- Keys.Gamepad_RightY.Name = skCrypt("Gamepad_RightY").decrypt();
- Keys.Gamepad_LeftTriggerAxis.FName = SDK::FName(skCrypt(L"Gamepad_LeftTriggerAxis").decrypt());
- Keys.Gamepad_LeftTriggerAxis.Name = skCrypt("Gamepad_LeftTriggerAxis").decrypt();
- Keys.Gamepad_RightTriggerAxis.FName = SDK::FName(skCrypt(L"Gamepad_RightTriggerAxis").decrypt());
- Keys.Gamepad_RightTriggerAxis.Name = skCrypt("Gamepad_RightTriggerAxis").decrypt();
- Keys.Gamepad_LeftThumbstick.FName = SDK::FName(skCrypt(L"Gamepad_LeftThumbstick").decrypt());
- Keys.Gamepad_LeftThumbstick.Name = skCrypt("Gamepad_LeftThumbstick").decrypt();
- Keys.Gamepad_RightThumbstick.FName = SDK::FName(skCrypt(L"Gamepad_RightThumbstick").decrypt());
- Keys.Gamepad_RightThumbstick.Name = skCrypt("Gamepad_RightThumbstick").decrypt();
- Keys.Gamepad_Special_Left.FName = SDK::FName(skCrypt(L"Gamepad_Special_Left").decrypt());
- Keys.Gamepad_Special_Left.Name = skCrypt("Gamepad_Special_Left").decrypt();
- Keys.Gamepad_Special_Left_X.FName = SDK::FName(skCrypt(L"Gamepad_Special_Left_X").decrypt());
- Keys.Gamepad_Special_Left_X.Name = skCrypt("Gamepad_Special_Left_X").decrypt();
- Keys.Gamepad_Special_Left_Y.FName = SDK::FName(skCrypt(L"Gamepad_Special_Left_Y").decrypt());
- Keys.Gamepad_Special_Left_Y.Name = skCrypt("Gamepad_Special_Left_Y").decrypt();
- Keys.Gamepad_Special_Right.FName = SDK::FName(skCrypt(L"Gamepad_Special_Right").decrypt());
- Keys.Gamepad_Special_Right.Name = skCrypt("Gamepad_Special_Right").decrypt();
- Keys.Gamepad_FaceButton_Bottom.FName = SDK::FName(skCrypt(L"Gamepad_FaceButton_Bottom").decrypt());
- Keys.Gamepad_FaceButton_Bottom.Name = skCrypt("Gamepad_FaceButton_Bottom").decrypt();
- Keys.Gamepad_FaceButton_Right.FName = SDK::FName(skCrypt(L"Gamepad_FaceButton_Right").decrypt());
- Keys.Gamepad_FaceButton_Right.Name = skCrypt("Gamepad_FaceButton_Right").decrypt();
- Keys.Gamepad_FaceButton_Left.FName = SDK::FName(skCrypt(L"Gamepad_FaceButton_Left").decrypt());
- Keys.Gamepad_FaceButton_Left.Name = skCrypt("Gamepad_FaceButton_Left").decrypt();
- Keys.Gamepad_FaceButton_Top.FName = SDK::FName(skCrypt(L"Gamepad_FaceButton_Top").decrypt());
- Keys.Gamepad_FaceButton_Top.Name = skCrypt("Gamepad_FaceButton_Top").decrypt();
- Keys.Gamepad_LeftShoulder.FName = SDK::FName(skCrypt(L"Gamepad_LeftShoulder").decrypt());
- Keys.Gamepad_LeftShoulder.Name = skCrypt("Gamepad_LeftShoulder").decrypt();
- Keys.Gamepad_RightShoulder.FName = SDK::FName(skCrypt(L"Gamepad_RightShoulder").decrypt());
- Keys.Gamepad_RightShoulder.Name = skCrypt("Gamepad_RightShoulder").decrypt();
- Keys.Gamepad_LeftTrigger.FName = SDK::FName(skCrypt(L"Gamepad_LeftTrigger").decrypt());
- Keys.Gamepad_LeftTrigger.Name = skCrypt("Gamepad_LeftTrigger").decrypt();
- Keys.Gamepad_RightTrigger.FName = SDK::FName(skCrypt(L"Gamepad_RightTrigger").decrypt());
- Keys.Gamepad_RightTrigger.Name = skCrypt("Gamepad_RightTrigger").decrypt();
- Keys.Gamepad_DPad_Up.FName = SDK::FName(skCrypt(L"Gamepad_DPad_Up").decrypt());
- Keys.Gamepad_DPad_Up.Name = skCrypt("Gamepad_DPad_Up").decrypt();
- Keys.Gamepad_DPad_Down.FName = SDK::FName(skCrypt(L"Gamepad_DPad_Down").decrypt());
- Keys.Gamepad_DPad_Down.Name = skCrypt("Gamepad_DPad_Down").decrypt();
- Keys.Gamepad_DPad_Right.FName = SDK::FName(skCrypt(L"Gamepad_DPad_Right").decrypt());
- Keys.Gamepad_DPad_Right.Name = skCrypt("Gamepad_DPad_Right").decrypt();
- Keys.Gamepad_DPad_Left.FName = SDK::FName(skCrypt(L"Gamepad_DPad_Left").decrypt());
- Keys.Gamepad_DPad_Left.Name = skCrypt("Gamepad_DPad_Left").decrypt();
- Keys.Gamepad_LeftStick_Up.FName = SDK::FName(skCrypt(L"Gamepad_LeftStick_Up").decrypt());
- Keys.Gamepad_LeftStick_Up.Name = skCrypt("Gamepad_LeftStick_Up").decrypt();
- Keys.Gamepad_LeftStick_Down.FName = SDK::FName(skCrypt(L"Gamepad_LeftStick_Down").decrypt());
- Keys.Gamepad_LeftStick_Down.Name = skCrypt("Gamepad_LeftStick_Down").decrypt();
- Keys.Gamepad_LeftStick_Right.FName = SDK::FName(skCrypt(L"Gamepad_LeftStick_Right").decrypt());
- Keys.Gamepad_LeftStick_Right.Name = skCrypt("Gamepad_LeftStick_Right").decrypt();
- Keys.Gamepad_LeftStick_Left.FName = SDK::FName(skCrypt(L"Gamepad_LeftStick_Left").decrypt());
- Keys.Gamepad_LeftStick_Left.Name = skCrypt("Gamepad_LeftStick_Left").decrypt();
- Keys.Gamepad_RightStick_Up.FName = SDK::FName(skCrypt(L"Gamepad_RightStick_Up").decrypt());
- Keys.Gamepad_RightStick_Up.Name = skCrypt("Gamepad_RightStick_Up").decrypt();
- Keys.Gamepad_RightStick_Down.FName = SDK::FName(skCrypt(L"Gamepad_RightStick_Down").decrypt());
- Keys.Gamepad_RightStick_Down.Name = skCrypt("Gamepad_RightStick_Down").decrypt();
- Keys.Gamepad_RightStick_Right.FName = SDK::FName(skCrypt(L"Gamepad_RightStick_Right").decrypt());
- Keys.Gamepad_RightStick_Right.Name = skCrypt("Gamepad_RightStick_Right").decrypt();
- Keys.Gamepad_RightStick_Left.FName = SDK::FName(skCrypt(L"Gamepad_RightStick_Left").decrypt());
- Keys.Gamepad_RightStick_Left.Name = skCrypt("Gamepad_RightStick_Left").decrypt();
+ Keys[KeyName::Gamepad_LeftX].FName = SDK::FName(skCrypt(L"Gamepad_LeftX").decrypt());
+ Keys[KeyName::Gamepad_LeftY].FName = SDK::FName(skCrypt(L"Gamepad_LeftY").decrypt());
+ Keys[KeyName::Gamepad_RightX].FName = SDK::FName(skCrypt(L"Gamepad_RightX").decrypt());
+ Keys[KeyName::Gamepad_RightY].FName = SDK::FName(skCrypt(L"Gamepad_RightY").decrypt());
+ Keys[KeyName::Gamepad_LeftTriggerAxis].FName = SDK::FName(skCrypt(L"Gamepad_LeftTriggerAxis").decrypt());
+ Keys[KeyName::Gamepad_RightTriggerAxis].FName = SDK::FName(skCrypt(L"Gamepad_RightTriggerAxis").decrypt());
+ Keys[KeyName::Gamepad_LeftThumbstick].FName = SDK::FName(skCrypt(L"Gamepad_LeftThumbstick").decrypt());
+ Keys[KeyName::Gamepad_RightThumbstick].FName = SDK::FName(skCrypt(L"Gamepad_RightThumbstick").decrypt());
+ Keys[KeyName::Gamepad_Special_Left].FName = SDK::FName(skCrypt(L"Gamepad_Special_Left").decrypt());
+ Keys[KeyName::Gamepad_Special_Left_X].FName = SDK::FName(skCrypt(L"Gamepad_Special_Left_X").decrypt());
+ Keys[KeyName::Gamepad_Special_Left_Y].FName = SDK::FName(skCrypt(L"Gamepad_Special_Left_Y").decrypt());
+ Keys[KeyName::Gamepad_Special_Right].FName = SDK::FName(skCrypt(L"Gamepad_Special_Right").decrypt());
+
+ Keys[KeyName::Gamepad_FaceButton_Bottom].FName = SDK::FName(skCrypt(L"Gamepad_FaceButton_Bottom").decrypt());
+ Keys[KeyName::Gamepad_FaceButton_Right].FName = SDK::FName(skCrypt(L"Gamepad_FaceButton_Right").decrypt());
+ Keys[KeyName::Gamepad_FaceButton_Left].FName = SDK::FName(skCrypt(L"Gamepad_FaceButton_Left").decrypt());
+ Keys[KeyName::Gamepad_FaceButton_Top].FName = SDK::FName(skCrypt(L"Gamepad_FaceButton_Top").decrypt());
+ Keys[KeyName::Gamepad_LeftShoulder].FName = SDK::FName(skCrypt(L"Gamepad_LeftShoulder").decrypt());
+ Keys[KeyName::Gamepad_RightShoulder].FName = SDK::FName(skCrypt(L"Gamepad_RightShoulder").decrypt());
+ Keys[KeyName::Gamepad_LeftTrigger].FName = SDK::FName(skCrypt(L"Gamepad_LeftTrigger").decrypt());
+ Keys[KeyName::Gamepad_RightTrigger].FName = SDK::FName(skCrypt(L"Gamepad_RightTrigger").decrypt());
+ Keys[KeyName::Gamepad_DPad_Up].FName = SDK::FName(skCrypt(L"Gamepad_DPad_Up").decrypt());
+ Keys[KeyName::Gamepad_DPad_Down].FName = SDK::FName(skCrypt(L"Gamepad_DPad_Down").decrypt());
+ Keys[KeyName::Gamepad_DPad_Right].FName = SDK::FName(skCrypt(L"Gamepad_DPad_Right").decrypt());
+ Keys[KeyName::Gamepad_DPad_Left].FName = SDK::FName(skCrypt(L"Gamepad_DPad_Left").decrypt());
+ Keys[KeyName::Gamepad_LeftStick_Up].FName = SDK::FName(skCrypt(L"Gamepad_LeftStick_Up").decrypt());
+ Keys[KeyName::Gamepad_LeftStick_Down].FName = SDK::FName(skCrypt(L"Gamepad_LeftStick_Down").decrypt());
+ Keys[KeyName::Gamepad_LeftStick_Right].FName = SDK::FName(skCrypt(L"Gamepad_LeftStick_Right").decrypt());
+ Keys[KeyName::Gamepad_LeftStick_Left].FName = SDK::FName(skCrypt(L"Gamepad_LeftStick_Left").decrypt());
+ Keys[KeyName::Gamepad_RightStick_Up].FName = SDK::FName(skCrypt(L"Gamepad_RightStick_Up").decrypt());
+ Keys[KeyName::Gamepad_RightStick_Down].FName = SDK::FName(skCrypt(L"Gamepad_RightStick_Down").decrypt());
+ Keys[KeyName::Gamepad_RightStick_Right].FName = SDK::FName(skCrypt(L"Gamepad_RightStick_Right").decrypt());
+ Keys[KeyName::Gamepad_RightStick_Left].FName = SDK::FName(skCrypt(L"Gamepad_RightStick_Left").decrypt());
}
DEBUG_LOG(skCrypt("Input system initialized!").decrypt());
diff --git a/Fortnite Internal/Game/Input/Input.h b/Fortnite Internal/Game/Input/Input.h
index 2d94f44..0fdf0bd 100644
--- a/Fortnite Internal/Game/Input/Input.h
+++ b/Fortnite Internal/Game/Input/Input.h
@@ -1,4 +1,6 @@
#pragma once
+#include
+
#include "../SDK/SDK.h"
#include "../SDK/Classes/Engine_classes.h"
@@ -150,16 +152,25 @@ public:
Gamepad_RightTrigger,
Gamepad_DPad_Up,
Gamepad_DPad_Down,
- Gamepad_DPad_Right,
Gamepad_DPad_Left,
+ Gamepad_DPad_Right,
Gamepad_LeftStick_Up,
Gamepad_LeftStick_Down,
- Gamepad_LeftStick_Right,
Gamepad_LeftStick_Left,
+ Gamepad_LeftStick_Right,
Gamepad_RightStick_Up,
Gamepad_RightStick_Down,
+ Gamepad_RightStick_Left,
Gamepad_RightStick_Right,
- Gamepad_RightStick_Left
+
+ KEYNAME_MAX
+ };
+
+ /* Info on key names */
+ struct KeyMapInfo {
+ std::string Name;
+ SDK::FName FName;
+ Input::KeyName KeyName;
};
private:
/* Cache info on keystates to avoid multiple checks per frame */
@@ -183,193 +194,15 @@ private:
KeyInfoCache WasJustReleased{};
KeyInfoCache WasJustPressed{};
- KeyName KeyName;
+
+
+ KeyData() : FName(), Name() {}
+
+ KeyData(SDK::FName FName, std::string Name) : FName(FName), Name(Name) {}
};
- /* Cache info on all keys */
- struct KeysCache {
- KeyData AnyKey;
-
- KeyData MouseX;
- KeyData MouseY;
- KeyData MouseScrollUp;
- KeyData MouseScrollDown;
- KeyData LeftMouseButton;
- KeyData RightMouseButton;
- KeyData MiddleMouseButton;
- KeyData ThumbMouseButton;
- KeyData ThumbMouseButton2;
-
- KeyData BackSpace;
- KeyData Tab;
- KeyData Enter;
- KeyData Pause;
- KeyData CapsLock;
- KeyData Escape;
- KeyData SpaceBar;
- KeyData PageUp;
- KeyData PageDown;
- KeyData End;
- KeyData Home;
-
- KeyData Left;
- KeyData Up;
- KeyData Right;
- KeyData Down;
-
- KeyData Insert;
- KeyData Delete;
-
- KeyData Zero;
- KeyData One;
- KeyData Two;
- KeyData Three;
- KeyData Four;
- KeyData Five;
- KeyData Six;
- KeyData Seven;
- KeyData Eight;
- KeyData Nine;
-
- KeyData A;
- KeyData B;
- KeyData C;
- KeyData D;
- KeyData E;
- KeyData F;
- KeyData G;
- KeyData H;
- KeyData I;
- KeyData J;
- KeyData K;
- KeyData L;
- KeyData M;
- KeyData N;
- KeyData O;
- KeyData P;
- KeyData Q;
- KeyData R;
- KeyData S;
- KeyData T;
- KeyData U;
- KeyData V;
- KeyData W;
- KeyData X;
- KeyData Y;
- KeyData Z;
-
- KeyData NumPadZero;
- KeyData NumPadOne;
- KeyData NumPadTwo;
- KeyData NumPadThree;
- KeyData NumPadFour;
- KeyData NumPadFive;
- KeyData NumPadSix;
- KeyData NumPadSeven;
- KeyData NumPadEight;
- KeyData NumPadNine;
-
- KeyData Multiply;
- KeyData Add;
- KeyData Subtract;
- KeyData Decimal;
- KeyData Divide;
-
- KeyData F1;
- KeyData F2;
- KeyData F3;
- KeyData F4;
- KeyData F5;
- KeyData F6;
- KeyData F7;
- KeyData F8;
- KeyData F9;
- KeyData F10;
- KeyData F11;
- KeyData F12;
-
- KeyData NumLock;
- KeyData ScrollLock;
- KeyData LeftShift;
- KeyData RightShift;
- KeyData LeftControl;
- KeyData RightControl;
- KeyData LeftAlt;
- KeyData RightAlt;
- KeyData LeftCommand;
- KeyData RightCommand;
- KeyData Semicolon;
- KeyData Equals;
- KeyData Comma;
- KeyData Underscore;
- KeyData Period;
- KeyData Slash;
- KeyData Tilde;
- KeyData LeftBracket;
- KeyData Backslash;
- KeyData RightBracket;
- KeyData Quote;
- KeyData Asterix;
- KeyData Ampersand;
- KeyData Caret;
- KeyData Dollar;
- KeyData Exclamation;
- KeyData Colon;
-
- KeyData A_AccentGrave;
- KeyData E_AccentGrave;
- KeyData E_AccentAigu;
- KeyData C_Cedille;
-
- KeyData Section;
-
- KeyData Gamepad_LeftX;
- KeyData Gamepad_LeftY;
- KeyData Gamepad_RightX;
- KeyData Gamepad_RightY;
- KeyData Gamepad_LeftTriggerAxis;
- KeyData Gamepad_RightTriggerAxis;
- KeyData Gamepad_LeftThumbstick;
- KeyData Gamepad_RightThumbstick;
- KeyData Gamepad_Special_Left;
- KeyData Gamepad_Special_Left_X;
- KeyData Gamepad_Special_Left_Y;
- KeyData Gamepad_Special_Right;
- KeyData Gamepad_FaceButton_Bottom;
- KeyData Gamepad_FaceButton_Right;
- KeyData Gamepad_FaceButton_Left;
- KeyData Gamepad_FaceButton_Top;
- KeyData Gamepad_LeftShoulder;
- KeyData Gamepad_RightShoulder;
- KeyData Gamepad_LeftTrigger;
- KeyData Gamepad_RightTrigger;
- KeyData Gamepad_DPad_Up;
- KeyData Gamepad_DPad_Down;
- KeyData Gamepad_DPad_Right;
- KeyData Gamepad_DPad_Left;
- KeyData Gamepad_LeftStick_Up;
- KeyData Gamepad_LeftStick_Down;
- KeyData Gamepad_LeftStick_Right;
- KeyData Gamepad_LeftStick_Left;
- KeyData Gamepad_RightStick_Up;
- KeyData Gamepad_RightStick_Down;
- KeyData Gamepad_RightStick_Right;
- KeyData Gamepad_RightStick_Left;
-
- KeyData None;
- };
-
-
-
- static KeysCache Keys;
+ static std::unordered_map Keys;
static MouseCache Mouse;
-private:
- /*
- * @brief Get the key data for a specific key
- *
- * @param Key - The key to get the data for
- */
- static KeyData& GetKeyData(KeyName Key);
public:
/*
* @brief Get the mouse position
@@ -402,6 +235,33 @@ public:
* @return Returns - The mouse position
*/
static bool WasKeyJustPressed(KeyName Key);
+ /*
+ * @brief Get all the keys that are currently down
+ *
+ * @return A vector of all the keys that are currently down
+ */
+ std::vector GetAllDownKeys();
+ /*
+ * @brief Get all the keys that were just released
+ *
+ * @return A vector of all the keys that were just released
+ */
+ std::vector GetAllJustReleasedKeys();
+ /*
+ * @brief Get all the keys that were just pressed
+ *
+ * @return A vector of all the keys that were just pressed
+ */
+ std::vector GetAllJustPressedKeys();
+
+ /*
+ * @brief Get the key name from a key
+ *
+ * @param Key - The key to get the name of
+ *
+ * @return The name of the key
+ */
+ std::string GetKeyName(Input::KeyName Key);
/* Init the input cache system */
static void Init();
diff --git a/Fortnite Internal/Game/SDK/Classes/CoreUObject_classes.h b/Fortnite Internal/Game/SDK/Classes/CoreUObject_classes.h
index a722afe..77c030c 100644
--- a/Fortnite Internal/Game/SDK/Classes/CoreUObject_classes.h
+++ b/Fortnite Internal/Game/SDK/Classes/CoreUObject_classes.h
@@ -14,20 +14,29 @@ typedef unsigned __int16 uint16;
typedef unsigned __int32 uint32;
typedef unsigned __int64 uint64;
-enum class OffsetType {
- Class = 0,
- Struct = 1,
-};
struct FunctionSearch {
- std::string ClassName;
- std::string FunctionName;
- void** Function;
+ std::string ClassName; // The name of the class
+ std::string FunctionName; // The name of the function
+ void** Function; // A pointer to save the function address to
+
+ bool operator==(const FunctionSearch& rhs) {
+ return ClassName == rhs.ClassName
+ && FunctionName == rhs.FunctionName
+ && Function == rhs.Function;
+ }
};
struct OffsetSearch {
- std::string ClassName;
- std::string PropertyName;
- uintptr_t* Offset;
- OffsetType Type;
+ std::string ClassName; // The name of the class
+ std::string PropertyName; // The name of the property
+ uintptr_t* Offset; // A pointer to save the offset to
+ uintptr_t* Mask; // A pointer to save the bitfield mask to
+
+ bool operator==(const OffsetSearch& rhs) {
+ return ClassName == rhs.ClassName
+ && PropertyName == rhs.PropertyName
+ && Offset == rhs.Offset
+ && Mask == rhs.Mask;
+ }
};
namespace SDK {
@@ -107,6 +116,25 @@ namespace SDK {
return nullptr;
}
+ template
+ static UEType* FindObjectFastInOuter(std::string Name, std::string Outer)
+ {
+ for (int i = 0; i < ObjectArray.Num(); ++i)
+ {
+ UObject* Object = ObjectArray.GetByIndex(i);
+
+ if (!Object)
+ continue;
+
+ if (Object->GetName() == Name && Object->Outer->GetName() == Outer)
+ {
+ return reinterpret_cast(Object);
+ }
+ }
+
+ return nullptr;
+ }
+
static class UClass* FindClass(const std::string& ClassFullName)
{
@@ -119,6 +147,7 @@ namespace SDK {
}
+
static void SetupObjects(std::vector& Functions, std::vector& Offsets);
@@ -127,15 +156,28 @@ namespace SDK {
+ class FFieldClass
+ {
+ public:
+ FName Name; // (0x00[0x08]) NOT AUTO-GENERATED PROPERTY
+ uint64 Id; // (0x08[0x08]) NOT AUTO-GENERATED PROPERTY
+ EClassCastFlags CastFlags; // (0x10[0x08]) NOT AUTO-GENERATED PROPERTY
+ uint64 ClassFlags; // (0x18[0x04]) NOT AUTO-GENERATED PROPERTY
+ uint8 Pad_74C3[0x4]; // Fixing Size After Last (Predefined) Property [ Dumper-7 ]
+ FFieldClass* SuperClass; // (0x20[0x08]) NOT AUTO-GENERATED PROPERTY
+ };
+
class FField
{
public:
void* Vft; // (0x00[0x08]) NOT AUTO-GENERATED PROPERTY
- void* Class; // (0x08[0x08]) NOT AUTO-GENERATED PROPERTY
+ FFieldClass* Class; // (0x08[0x08]) NOT AUTO-GENERATED PROPERTY
char Owner[0x10]; // (0x10[0x10]) NOT AUTO-GENERATED PROPERTY
FField* Next; // (0x20[0x08]) NOT AUTO-GENERATED PROPERTY
FName Name; // (0x28[0x10]) NOT AUTO-GENERATED PROPERTY
int32 Flags; // (0x38[0x04]) NOT AUTO-GENERATED PROPERTY
+
+ bool HasTypeFlag(EClassCastFlags TypeFlag) const;
};
class FProperty : public FField
@@ -147,18 +189,44 @@ namespace SDK {
int32 Offset; // (0x4C[0x04]) NOT AUTO-GENERATED PROPERTY
};
+ class FBoolProperty : public FProperty
+ {
+ public:
+ uint8 Pad_74C7[0x28]; // Fixing Size After Last (Predefined) Property [ Dumper-7 ]
+ uint8 FieldSize; // (0x78[0x01]) NOT AUTO-GENERATED PROPERTY
+ uint8 ByteOffset; // (0x79[0x01]) NOT AUTO-GENERATED PROPERTY
+ uint8 ByteMask; // (0x7A[0x01]) NOT AUTO-GENERATED PROPERTY
+ uint8 FieldMask; // (0x7B[0x01]) NOT AUTO-GENERATED PROPERTY
+ };
+
+ class UField : public UObject {
+ public:
+ static uint32 NextOffset;
+
+ class UField* Next() {
+ if (SDK::IsValidPointer((uintptr_t)this) == false) return nullptr;
+ return (UField*)(*(uintptr_t*)((uintptr_t)this + NextOffset));
+ }
+ };
+
class UStruct : public UObject {
public:
- static int32_t SuperOffset;
- static int32_t ChildPropertiesOffset;
+ static uint32 SuperOffset;
+ static uint32 ChildPropertiesOffset;
+ static uint32 ChildrenOffset;
class UStruct* Super() {
- if (!this) return nullptr;
+ if (SDK::IsValidPointer((uintptr_t)this) == false) return nullptr;
return (UStruct*)(*(uintptr_t*)((uintptr_t)this + SuperOffset));
}
+ class UField* Children() {
+ if (SDK::IsValidPointer((uintptr_t)this) == false) return nullptr;
+ return (UField*)(*(uintptr_t*)((uintptr_t)this + ChildrenOffset));
+ }
+
class FField* ChildProperties() {
- if (!this) return nullptr;
+ if (SDK::IsValidPointer((uintptr_t)this) == false) return nullptr;
return (FField*)(*(uintptr_t*)((uintptr_t)this + ChildPropertiesOffset));
}
};
@@ -166,31 +234,42 @@ namespace SDK {
class UProperty : public UObject
{
public:
- static int32_t OffsetOffset;
+ static uint32 OffsetOffset;
int32 Offset() {
- if (!this) return 0;
+ if (SDK::IsValidPointer((uintptr_t)this) == false) return 0;
return *(int32*)((uintptr_t)this + OffsetOffset);
}
};
+ class UBoolProperty : public UProperty {
+ public:
+ static uint32 ByteMaskOffset;
+
+ uint8 ByteMask() {
+ if (SDK::IsValidPointer((uintptr_t)this) == false) return 0;
+ return *(uint8*)((uintptr_t)this + ByteMaskOffset);
+ }
+ };
+
class UClass : public UStruct {
public:
- static int32_t CastFlagsOffset;
- static int32_t DefaultObjectOffset;
+ static uint32 CastFlagsOffset;
+ static uint32 DefaultObjectOffset;
enum class EClassCastFlags CastFlags() {
- if (!this) return EClassCastFlags::None;
+ if (SDK::IsValidPointer((uintptr_t)this) == false) return EClassCastFlags::None;
return *(EClassCastFlags*)((uintptr_t)this + CastFlagsOffset);
}
+
class UObject* DefaultObject() {
- if (!this) return nullptr;
+ if (SDK::IsValidPointer((uintptr_t)this) == false) return nullptr;
return (UObject*)(*(uintptr_t*)((uintptr_t)this + DefaultObjectOffset));
}
};
class UFunction : public UStruct {
public:
- static int32_t FunctionFlags;
+ static uint32 FunctionFlagsOffset;
};
}
\ No newline at end of file
diff --git a/Fortnite Internal/Game/SDK/Classes/CoreUObject_functions.cpp b/Fortnite Internal/Game/SDK/Classes/CoreUObject_functions.cpp
index f5a4756..67078a3 100644
--- a/Fortnite Internal/Game/SDK/Classes/CoreUObject_functions.cpp
+++ b/Fortnite Internal/Game/SDK/Classes/CoreUObject_functions.cpp
@@ -8,12 +8,15 @@
namespace SDK {
TUObjectArray UObject::ObjectArray;
- int32_t UClass::DefaultObjectOffset;
- int32_t UClass::CastFlagsOffset;
- int32_t UStruct::SuperOffset;
- int32_t UStruct::ChildPropertiesOffset;
- int32_t UProperty::OffsetOffset;
- int32_t UFunction::FunctionFlags;
+ uint32 UClass::DefaultObjectOffset;
+ uint32 UClass::CastFlagsOffset;
+ uint32 UStruct::SuperOffset;
+ uint32 UStruct::ChildPropertiesOffset;
+ uint32 UStruct::ChildrenOffset;
+ uint32 UField::NextOffset;
+ uint32 UProperty::OffsetOffset;
+ uint32 UBoolProperty::ByteMaskOffset;
+ uint32 UFunction::FunctionFlagsOffset;
@@ -79,179 +82,6 @@ namespace SDK {
return "None";
}
- void UObject::SetupObjects(std::vector& Functions, std::vector& Offsets) {
-#if 0
- for (int i = 0; i < ObjectArray.Num() && (!Functions.empty() || !Offsets.empty()); ++i) {
- UObject* Object = ObjectArray.GetByIndex(i);
-
- if (!Object)
- continue;
-
- if (Object->IsDefaultObject() || Object->HasTypeFlag(SDK::EClassCastFlags::ScriptStruct)) {
- SDK::UStruct* ObjectStruct = Object->HasTypeFlag(SDK::EClassCastFlags::ScriptStruct) ? ((SDK::UStruct*)Object) : Object->Class;
-
- std::string ObjectName = ObjectStruct->Name.ToString();
-
- for (FunctionSearch& Function : Functions) {
- if (*Function.Function || !ObjectName.ends_with(Function.className))
- continue;
-
- SDK::UField* child = ObjectStruct->Children;
- while (child) {
- if (child->Name.ToString() == Function.childName) {
- *Function.Function = child;
- }
-
- child = child->Next;
- }
- }
-
- for (Offset_& offset : Offsets) {
- if (*offset.pOffset || !ObjectName.ends_with(offset.className))
- continue;
-
- SDK::FField* child = ObjectStruct->ChildProperties;
- while (child) {
- if (child->Name.ToString() == offset.propertyName) {
- *offset.pOffset = ((SDK::FProperty*)child)->Offset;
- if (offset.pMask && !*offset.pMask) {
- *offset.pMask = ((SDK::FBoolProperty*)child)->FieldMask;
- }
- }
-
- child = child->Next;
- }
- }
-
- for (Class_& class_ : Classes) {
- if (!*class_.pAddress && ObjectName == class_.className)
- *class_.pAddress = (uintptr_t)ObjectStruct;
- }
- }
- }
-#endif
-
- DEBUG_LOG(skCrypt("Setting up objects...").decrypt());
-
- for (int i = 0; i < ObjectArray.Num() && (!Functions.empty() || !Offsets.empty()); ++i) {
- UObject* Object = ObjectArray.GetByIndex(i);
-
- if (!Object)
- continue;
-
- std::string ObjectName = Object->GetName();
-
- if (ObjectName.empty())
- continue;
-
- if (!Functions.empty()) {
- if (Object->HasTypeFlag(EClassCastFlags::Function)) {
- for (auto it = Functions.begin(); it != Functions.end(); ) {
- FunctionSearch& CurrentFunction = *it;
-
- if (CurrentFunction.FunctionName == ObjectName) {
-
- std::string combinedString = CurrentFunction.ClassName + "." + CurrentFunction.FunctionName;
-
- std::string FullObjectName = Object->GetFullName();
-
- if (FullObjectName.length() >= combinedString.length() &&
- FullObjectName.substr(FullObjectName.length() - combinedString.length()) == combinedString) {
- *CurrentFunction.Function = Object;
- it = Functions.erase(it);
- }
- else {
- ++it;
- }
- }
- else {
- ++it;
- }
- }
- }
- }
-
- if (!Offsets.empty()) {
- for (auto it = Offsets.begin(); it != Offsets.end();) {
- OffsetSearch& CurrentOffset = *it;
-
- if (Game::GameVersion >= 12.00) {
- // In later UE4 versions, they changed how they manage UProperty variables, so we add "Default__" to the beginning of the class name
- // to find the default object of the class. There is no default object for structs, so we just use the class name
- std::string DefaultName;
- if (CurrentOffset.Type == OffsetType::Class) {
- DefaultName = skCrypt("Default__").decrypt() + CurrentOffset.ClassName;
- }
- else {
- DefaultName = CurrentOffset.ClassName;
- }
-
- if (ObjectName == DefaultName) {
- FField* ChildProperties = Object->Class->ChildProperties();
-
- if (!ChildProperties) {
- ++it;
- continue;
- }
-
- uint32_t Offset = GetPropertyOffset(ChildProperties, CurrentOffset.PropertyName);
-
- if (Offset) {
- *CurrentOffset.Offset = Offset;
- it = Offsets.erase(it);
- }
- else {
- ++it;
- }
- }
- else {
- ++it;
- }
- }
- else {
- if (CurrentOffset.PropertyName == ObjectName) {
- std::string combinedString = CurrentOffset.ClassName + "." + CurrentOffset.PropertyName;
-
- std::string FullObjectName = Object->GetFullName();
-
- if (FullObjectName.length() >= combinedString.length() &&
- FullObjectName.substr(FullObjectName.length() - combinedString.length()) == combinedString) {
- UProperty* Property = reinterpret_cast(Object);
- *CurrentOffset.Offset = GetPropertyOffset(Property);
- it = Offsets.erase(it);
- }
- else {
- ++it;
- }
- }
- else {
- ++it;
- }
- }
- }
- }
- }
-
- if (!Offsets.empty()) {
- std::string OffsetsNotFoundStr = skCrypt("Offsets not found:\n").decrypt();
- for (auto& Offset : Offsets) {
- OffsetsNotFoundStr += Offset.ClassName + skCrypt(".").decrypt() + Offset.PropertyName + skCrypt("\n").decrypt();
- }
-
- THROW_ERROR(skCrypt("One or more offsets were not found!\n").decrypt() + OffsetsNotFoundStr, false);
- }
- if (!Functions.empty()) {
- std::string FunctionsNotFoundStr = skCrypt("Functions not found:\n").decrypt();
- for (auto& Function : Functions) {
- FunctionsNotFoundStr += Function.ClassName + skCrypt(".").decrypt() + Function.FunctionName + skCrypt("\n").decrypt();
- }
-
- THROW_ERROR(skCrypt("One or more functions were not found!").decrypt() + FunctionsNotFoundStr, false);
- }
-
- DEBUG_LOG(skCrypt("Setup objects!").decrypt());
- }
-
bool UObject::IsA(class UClass* Clss) const
{
for (UStruct* Super = Class; Super; Super = Super->Super())
@@ -264,4 +94,128 @@ namespace SDK {
return false;
}
+
+ bool FField::HasTypeFlag(EClassCastFlags TypeFlag) const
+ {
+ if (Class == nullptr)
+ return false;
+
+ return TypeFlag != EClassCastFlags::None ? Class->CastFlags & TypeFlag : true;
+ }
+
+
+
+ void UObject::SetupObjects(std::vector& Functions, std::vector& Offsets) {
+ DEBUG_LOG(skCrypt("Setting up objects...").decrypt());
+
+ std::vector FunctionsNotFound = Functions;
+ std::vector OffsetsNotFound = Offsets;
+
+
+
+ for (int i = 0; i < ObjectArray.Num() && (Functions.empty() == false || Offsets.empty() == false); i++) {
+ UObject* Object = ObjectArray.GetByIndex(i);
+
+ if (!Object)
+ continue;
+
+ // In later UE4 versions, they changed how they managed properties
+ // so we need to add these addional checks to make sure we only get the default object or ScriptStruct
+ if (Game::GameVersion >= 12.00 && Object->IsDefaultObject() == false && Object->HasTypeFlag(SDK::EClassCastFlags::ScriptStruct) == false)
+ continue;
+
+ SDK::UStruct* ObjectStruct = Object->HasTypeFlag(SDK::EClassCastFlags::ScriptStruct) ? ((SDK::UStruct*)Object) : Object->Class;
+ std::string ObjectName = ObjectStruct->Name.ToString();
+
+ for (FunctionSearch& Function : Functions) {
+ if (*Function.Function || ObjectName.ends_with(Function.ClassName) == false)
+ continue;
+
+ SDK::UField* Children = ObjectStruct->Children();
+ while (Children) {
+ if (Children->HasTypeFlag(SDK::EClassCastFlags::Function) && Children->Name.ToString() == Function.FunctionName) {
+ *Function.Function = Children;
+
+ FunctionsNotFound.erase(std::remove(FunctionsNotFound.begin(), FunctionsNotFound.end(), Function), FunctionsNotFound.end());
+ }
+
+ Children = Children->Next();
+ }
+ }
+
+ for (OffsetSearch& Offset : Offsets) {
+ if ((Offset.Offset == nullptr && Offset.Mask == nullptr) || ObjectName.ends_with(Offset.ClassName) == false)
+ continue;
+
+ if (Game::GameVersion >= 12.00) {
+ 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)) {
+ *Offset.Offset = ((SDK::FProperty*)ChildProperty)->Offset;
+ }
+
+ if (Offset.Mask != nullptr && *Offset.Mask == 0x0 && ChildProperty->HasTypeFlag(SDK::EClassCastFlags::BoolProperty)) {
+ *Offset.Mask = ((SDK::FBoolProperty*)ChildProperty)->FieldMask;
+ }
+
+ OffsetsNotFound.erase(std::remove(OffsetsNotFound.begin(), OffsetsNotFound.end(), Offset), OffsetsNotFound.end());
+ }
+
+ ChildProperty = ChildProperty->Next;
+ }
+ }
+ else {
+ if (ObjectName.ends_with(Offset.ClassName)) {
+ 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)) {
+ *Offset.Offset = GetPropertyOffset((SDK::UProperty*)Child);
+ }
+
+ if (Offset.Mask != nullptr && *Offset.Mask == 0x0 && Child->HasTypeFlag(SDK::EClassCastFlags::BoolProperty)) {
+ *Offset.Mask = ((SDK::UBoolProperty*)Child)->ByteMaskOffset;
+ }
+
+ OffsetsNotFound.erase(std::remove(OffsetsNotFound.begin(), OffsetsNotFound.end(), Offset), OffsetsNotFound.end());
+ }
+
+ Child = Child->Next();
+ }
+ }
+ }
+ }
+ }
+
+
+
+ if (OffsetsNotFound.empty() == false || FunctionsNotFound.empty() == false) {
+ std::string MissingOffsets;
+ for (OffsetSearch& Offset : OffsetsNotFound) {
+ MissingOffsets += Offset.ClassName + " " + Offset.PropertyName + "\n";
+ }
+
+ std::string MissingFunctions;
+ for (FunctionSearch& Function : FunctionsNotFound) {
+ MissingFunctions += Function.ClassName + " " + Function.FunctionName + "\n";
+ }
+
+ std::string Output = skCrypt("").decrypt();
+
+ if (MissingOffsets.empty() == false) {
+ Output += skCrypt("Missing offsets: \n").decrypt();
+ Output += MissingOffsets;
+ }
+
+ if (MissingFunctions.empty() == false) {
+ Output += skCrypt("\nMissing functions: \n").decrypt();
+ Output += MissingFunctions;
+ }
+
+ THROW_ERROR(skCrypt("Failed to find all offsets and functions!\n\n").decrypt() + Output, CRASH_ON_ERROR);
+ }
+
+ DEBUG_LOG(skCrypt("Setup objects!").decrypt());
+ }
}
\ No newline at end of file
diff --git a/Fortnite Internal/Game/SDK/Classes/FortniteGame_Classes.h b/Fortnite Internal/Game/SDK/Classes/FortniteGame_Classes.h
index 00d05e3..dd5534c 100644
--- a/Fortnite Internal/Game/SDK/Classes/FortniteGame_Classes.h
+++ b/Fortnite Internal/Game/SDK/Classes/FortniteGame_Classes.h
@@ -107,6 +107,18 @@ namespace SDK {
return (AFortWeapon*)(*(uintptr_t*)((uintptr_t)this + SDK::Cached::Offsets::FortPawn::CurrentWeapon));
}
+ bool IsDying() {
+ if (!SDK::IsValidPointer((uintptr_t)this)) return false;
+
+ if (SDK::Cached::Masks::FortPawn::bIsDying) {
+ uint8 BitField = *(uint8*)((uintptr_t)this + SDK::Cached::Offsets::FortPawn::bIsDying);
+ return BitField & SDK::Cached::Masks::FortPawn::bIsDying;
+ }
+ else {
+ return *(bool*)((uintptr_t)this + SDK::Cached::Offsets::FortPawn::bIsDying);
+ }
+ }
+
// STATIC FUNCTIONS
@@ -117,9 +129,9 @@ namespace SDK {
public:
// VALUES
- uint8_t GetWeakSpotInfo() {
+ uint8 GetWeakSpotInfo() {
if (!this) return 0;
- return *(uint8_t*)((uintptr_t)this + SDK::Cached::Offsets::BuildingWeakSpot::WeakSpotInfoBitField);
+ return *(uint8*)((uintptr_t)this + SDK::Cached::Offsets::BuildingWeakSpot::WeakSpotInfoBitField);
}
diff --git a/Fortnite Internal/Game/SDK/SDK.cpp b/Fortnite Internal/Game/SDK/SDK.cpp
index 0336d2e..a201e24 100644
--- a/Fortnite Internal/Game/SDK/SDK.cpp
+++ b/Fortnite Internal/Game/SDK/SDK.cpp
@@ -42,15 +42,17 @@ void SDK::Init() {
SDKInitializer::InitLineTraceSingle();
// Init Class Offsets
- SDK::UProperty::OffsetOffset = 0x44;
+ SDK::UProperty::OffsetOffset = 0x44; // Doesn't change (as far as I know)
+ SDK::UBoolProperty::ByteMaskOffset = 0x72; // Doesn't change (as far as I know)
SDK::UClass::DefaultObjectOffset = SDKInitializer::FindDefaultObjectOffset();
SDK::UClass::CastFlagsOffset = SDKInitializer::FindCastFlagsOffset();
SDK::UStruct::SuperOffset = SDKInitializer::FindSuperOffset();
SDK::UStruct::ChildPropertiesOffset = SDKInitializer::FindChildPropertiesOffset();
- SDK::UFunction::FunctionFlags = SDKInitializer::FindFunctionFlagsOffset();
+ SDK::UStruct::ChildrenOffset = SDKInitializer::FindChildrenOffset();
+ SDK::UField::NextOffset = SDKInitializer::FindUFieldNextOffset();
+ SDK::UFunction::FunctionFlagsOffset = SDKInitializer::FindFunctionFlagsOffset();
// Init VFT Indexes
- SDKInitializer::InitPRIndex();
SDKInitializer::InitPEIndex();
SDKInitializer::InitGPVIndex();
SDKInitializer::InitGVIndex();
@@ -73,63 +75,67 @@ void SDK::Init() {
// Init Cached Objects
{
- std::vector Functions{
- FunctionSearch { skCrypt("Canvas").decrypt(), skCrypt("K2_DrawLine").decrypt(), &SDK::Cached::Functions::Canvas::K2_DrawLine },
- FunctionSearch { skCrypt("Canvas").decrypt(), skCrypt("K2_DrawText").decrypt(), &SDK::Cached::Functions::Canvas::K2_DrawText },
- FunctionSearch { skCrypt("Canvas").decrypt(), skCrypt("K2_TextSize").decrypt(), &SDK::Cached::Functions::Canvas::K2_TextSize },
- FunctionSearch { skCrypt("Canvas").decrypt(), skCrypt("K2_Project").decrypt(), &SDK::Cached::Functions::Canvas::K2_Project },
- FunctionSearch { skCrypt("GameplayStatics").decrypt(), skCrypt("GetAllActorsOfClass").decrypt(), &SDK::Cached::Functions::GameplayStatics::GetAllActorsOfClass },
- FunctionSearch { skCrypt("PlayerCameraManager").decrypt(), skCrypt("GetCameraLocation").decrypt(), &SDK::Cached::Functions::PlayerCameraManager::GetCameraLocation },
- FunctionSearch { skCrypt("PlayerCameraManager").decrypt(), skCrypt("GetCameraRotation").decrypt(), &SDK::Cached::Functions::PlayerCameraManager::GetCameraRotation },
- FunctionSearch { skCrypt("PlayerCameraManager").decrypt(), skCrypt("GetFOVAngle").decrypt(), &SDK::Cached::Functions::PlayerCameraManager::GetFOVAngle },
- FunctionSearch { skCrypt("PlayerController").decrypt(), skCrypt("IsInputKeyDown").decrypt(), &SDK::Cached::Functions::PlayerController::IsInputKeyDown },
- FunctionSearch { skCrypt("PlayerController").decrypt(), skCrypt("WasInputKeyJustReleased").decrypt(), &SDK::Cached::Functions::PlayerController::WasInputKeyJustReleased },
- FunctionSearch { skCrypt("PlayerController").decrypt(), skCrypt("WasInputKeyJustPressed").decrypt(), &SDK::Cached::Functions::PlayerController::WasInputKeyJustPressed },
- FunctionSearch { skCrypt("PlayerController").decrypt(), skCrypt("GetMousePosition").decrypt(), &SDK::Cached::Functions::PlayerController::GetMousePosition },
- FunctionSearch { skCrypt("Controller").decrypt(), skCrypt("ClientSetRotation").decrypt(), &SDK::Cached::Functions::PlayerController::ClientSetRotation },
- FunctionSearch { skCrypt("Controller").decrypt(), skCrypt("SetControlRotation").decrypt(), &SDK::Cached::Functions::PlayerController::SetControlRotation },
- FunctionSearch { skCrypt("KismetSystemLibrary").decrypt(), skCrypt("LineTraceSingle").decrypt(), &SDK::Cached::Functions::KismetSystemLibrary::LineTraceSingle },
- FunctionSearch { skCrypt("KismetMathLibrary").decrypt(), skCrypt("FindLookAtRotation").decrypt(), &SDK::Cached::Functions::KismetMathLibrary::FindLookAtRotation },
- FunctionSearch { skCrypt("KismetMathLibrary").decrypt(), skCrypt("GetForwardVector").decrypt(), &SDK::Cached::Functions::KismetMathLibrary::GetForwardVector },
- FunctionSearch { skCrypt("PlayerState").decrypt(), skCrypt("GetPlayerName").decrypt(), &SDK::Cached::Functions::PlayerState::GetPlayerName },
- FunctionSearch { skCrypt("SkinnedMeshComponent").decrypt(), skCrypt("GetBoneName").decrypt(), &SDK::Cached::Functions::SkinnedMeshComponent::GetBoneName },
- FunctionSearch { skCrypt("SceneComponent").decrypt(), skCrypt("GetSocketLocation").decrypt(), &SDK::Cached::Functions::SkinnedMeshComponent::GetSocketLocation },
- FunctionSearch { skCrypt("Actor").decrypt(), skCrypt("K2_SetActorRotation").decrypt(), &SDK::Cached::Functions::Actor::K2_SetActorRotation },
+ std::vector Functions {
+ FunctionSearch { skCrypt("Canvas").decrypt(), skCrypt("K2_DrawLine").decrypt(), &SDK::Cached::Functions::Canvas::K2_DrawLine },
+ FunctionSearch { skCrypt("Canvas").decrypt(), skCrypt("K2_DrawText").decrypt(), &SDK::Cached::Functions::Canvas::K2_DrawText },
+ FunctionSearch { skCrypt("Canvas").decrypt(), skCrypt("K2_TextSize").decrypt(), &SDK::Cached::Functions::Canvas::K2_TextSize },
+ FunctionSearch { skCrypt("Canvas").decrypt(), skCrypt("K2_Project").decrypt(), &SDK::Cached::Functions::Canvas::K2_Project },
+ FunctionSearch { skCrypt("GameplayStatics").decrypt(), skCrypt("GetAllActorsOfClass").decrypt(), &SDK::Cached::Functions::GameplayStatics::GetAllActorsOfClass },
+ FunctionSearch { skCrypt("PlayerCameraManager").decrypt(), skCrypt("GetCameraLocation").decrypt(), &SDK::Cached::Functions::PlayerCameraManager::GetCameraLocation },
+ FunctionSearch { skCrypt("PlayerCameraManager").decrypt(), skCrypt("GetCameraRotation").decrypt(), &SDK::Cached::Functions::PlayerCameraManager::GetCameraRotation },
+ FunctionSearch { skCrypt("PlayerCameraManager").decrypt(), skCrypt("GetFOVAngle").decrypt(), &SDK::Cached::Functions::PlayerCameraManager::GetFOVAngle },
+ FunctionSearch { skCrypt("PlayerController").decrypt(), skCrypt("IsInputKeyDown").decrypt(), &SDK::Cached::Functions::PlayerController::IsInputKeyDown },
+ FunctionSearch { skCrypt("PlayerController").decrypt(), skCrypt("WasInputKeyJustReleased").decrypt(), &SDK::Cached::Functions::PlayerController::WasInputKeyJustReleased },
+ FunctionSearch { skCrypt("PlayerController").decrypt(), skCrypt("WasInputKeyJustPressed").decrypt(), &SDK::Cached::Functions::PlayerController::WasInputKeyJustPressed },
+ FunctionSearch { skCrypt("PlayerController").decrypt(), skCrypt("GetMousePosition").decrypt(), &SDK::Cached::Functions::PlayerController::GetMousePosition },
+ FunctionSearch { skCrypt("Controller").decrypt(), skCrypt("ClientSetRotation").decrypt(), &SDK::Cached::Functions::PlayerController::ClientSetRotation },
+ FunctionSearch { skCrypt("Controller").decrypt(), skCrypt("SetControlRotation").decrypt(), &SDK::Cached::Functions::PlayerController::SetControlRotation },
+ FunctionSearch { skCrypt("KismetSystemLibrary").decrypt(), skCrypt("LineTraceSingle").decrypt(), &SDK::Cached::Functions::KismetSystemLibrary::LineTraceSingle },
+ FunctionSearch { skCrypt("KismetMathLibrary").decrypt(), skCrypt("FindLookAtRotation").decrypt(), &SDK::Cached::Functions::KismetMathLibrary::FindLookAtRotation },
+ FunctionSearch { skCrypt("KismetMathLibrary").decrypt(), skCrypt("GetForwardVector").decrypt(), &SDK::Cached::Functions::KismetMathLibrary::GetForwardVector },
+ FunctionSearch { skCrypt("PlayerState").decrypt(), skCrypt("GetPlayerName").decrypt(), &SDK::Cached::Functions::PlayerState::GetPlayerName },
+ FunctionSearch { skCrypt("SkinnedMeshComponent").decrypt(), skCrypt("GetBoneName").decrypt(), &SDK::Cached::Functions::SkinnedMeshComponent::GetBoneName },
+ FunctionSearch { skCrypt("SceneComponent").decrypt(), skCrypt("GetSocketLocation").decrypt(), &SDK::Cached::Functions::SkinnedMeshComponent::GetSocketLocation },
+ FunctionSearch { skCrypt("Actor").decrypt(), skCrypt("K2_SetActorRotation").decrypt(), &SDK::Cached::Functions::Actor::K2_SetActorRotation },
};
- std::vector Offsets{
- OffsetSearch { skCrypt("Engine").decrypt(), skCrypt("GameViewport").decrypt(), &SDK::Cached::Offsets::Engine::GameViewport, OffsetType::Class },
- OffsetSearch { skCrypt("GameViewportClient").decrypt(), skCrypt("World").decrypt(), &SDK::Cached::Offsets::GameViewportClient::World, OffsetType::Class },
- OffsetSearch { skCrypt("GameViewportClient").decrypt(), skCrypt("GameInstance").decrypt(), &SDK::Cached::Offsets::GameViewportClient::GameInstance, OffsetType::Class },
- OffsetSearch { skCrypt("GameInstance").decrypt(), skCrypt("LocalPlayers").decrypt(), &SDK::Cached::Offsets::GameInstance::LocalPlayers, OffsetType::Class },
- OffsetSearch { skCrypt("Player").decrypt(), skCrypt("PlayerController").decrypt(), &SDK::Cached::Offsets::Player::PlayerController, OffsetType::Class },
- OffsetSearch { skCrypt("PlayerController").decrypt(), skCrypt("AcknowledgedPawn").decrypt(), &SDK::Cached::Offsets::PlayerController::AcknowledgedPawn, OffsetType::Class },
- OffsetSearch { skCrypt("PlayerController").decrypt(), skCrypt("PlayerCameraManager").decrypt(), &SDK::Cached::Offsets::PlayerController::PlayerCameraManager, OffsetType::Class },
- OffsetSearch { skCrypt("HUD").decrypt(), skCrypt("DebugCanvas").decrypt(), &SDK::Cached::Offsets::HUD::Canvas, OffsetType::Class },
- OffsetSearch { skCrypt("Pawn").decrypt(), skCrypt("PlayerState").decrypt(), &SDK::Cached::Offsets::Pawn::PlayerState, OffsetType::Class },
- OffsetSearch { skCrypt("Character").decrypt(), skCrypt("Mesh").decrypt(), &SDK::Cached::Offsets::Character::Mesh, OffsetType::Class },
- OffsetSearch { skCrypt("Font").decrypt(), skCrypt("LegacyFontSize").decrypt(), &SDK::Cached::Offsets::Font::LegacyFontSize, OffsetType::Class },
+ std::vector Offsets {
+ OffsetSearch { skCrypt("Engine").decrypt(), skCrypt("GameViewport").decrypt(), &SDK::Cached::Offsets::Engine::GameViewport, nullptr },
+ OffsetSearch { skCrypt("GameViewportClient").decrypt(), skCrypt("World").decrypt(), &SDK::Cached::Offsets::GameViewportClient::World, nullptr },
+ OffsetSearch { skCrypt("GameViewportClient").decrypt(), skCrypt("GameInstance").decrypt(), &SDK::Cached::Offsets::GameViewportClient::GameInstance, nullptr },
+ OffsetSearch { skCrypt("GameInstance").decrypt(), skCrypt("LocalPlayers").decrypt(), &SDK::Cached::Offsets::GameInstance::LocalPlayers, nullptr },
+ OffsetSearch { skCrypt("Player").decrypt(), skCrypt("PlayerController").decrypt(), &SDK::Cached::Offsets::Player::PlayerController, nullptr },
+ OffsetSearch { skCrypt("PlayerController").decrypt(), skCrypt("AcknowledgedPawn").decrypt(), &SDK::Cached::Offsets::PlayerController::AcknowledgedPawn, nullptr },
+ OffsetSearch { skCrypt("PlayerController").decrypt(), skCrypt("PlayerCameraManager").decrypt(), &SDK::Cached::Offsets::PlayerController::PlayerCameraManager, nullptr },
+ OffsetSearch { skCrypt("HUD").decrypt(), skCrypt("DebugCanvas").decrypt(), &SDK::Cached::Offsets::HUD::Canvas, nullptr },
+ OffsetSearch { skCrypt("Pawn").decrypt(), skCrypt("PlayerState").decrypt(), &SDK::Cached::Offsets::Pawn::PlayerState, nullptr },
+ OffsetSearch { skCrypt("Character").decrypt(), skCrypt("Mesh").decrypt(), &SDK::Cached::Offsets::Character::Mesh, nullptr },
+ OffsetSearch { skCrypt("Font").decrypt(), skCrypt("LegacyFontSize").decrypt(), &SDK::Cached::Offsets::Font::LegacyFontSize, nullptr },
- OffsetSearch { skCrypt("FortPickup").decrypt(), skCrypt("PrimaryPickupItemEntry").decrypt(), &SDK::Cached::Offsets::FortPickup::PrimaryPickupItemEntry, OffsetType::Class },
- OffsetSearch { skCrypt("FortItemDefinition").decrypt(), skCrypt("DisplayName").decrypt(), &SDK::Cached::Offsets::FortItemDefinition::DisplayName, OffsetType::Class },
- OffsetSearch { skCrypt("FortItemDefinition").decrypt(), skCrypt("Tier").decrypt(), &SDK::Cached::Offsets::FortItemDefinition::Tier, OffsetType::Class },
- OffsetSearch { skCrypt("Actor").decrypt(), skCrypt("RootComponent").decrypt(), &SDK::Cached::Offsets::Actor::RootComponent, OffsetType::Class },
- OffsetSearch { skCrypt("SceneComponent").decrypt(), skCrypt("RelativeLocation").decrypt(), &SDK::Cached::Offsets::SceneComponent::RelativeLocation, OffsetType::Class },
- OffsetSearch { skCrypt("Canvas").decrypt(), skCrypt("SizeX").decrypt(), &SDK::Cached::Offsets::Canvas::SizeX, OffsetType::Class },
- OffsetSearch { skCrypt("Canvas").decrypt(), skCrypt("SizeY").decrypt(), &SDK::Cached::Offsets::Canvas::SizeY, OffsetType::Class },
- OffsetSearch { skCrypt("FortPlayerStateAthena").decrypt(), skCrypt("TeamIndex").decrypt(), &SDK::Cached::Offsets::FortPlayerStateAthena::TeamIndex, OffsetType::Class },
- OffsetSearch { skCrypt("FortPawn").decrypt(), skCrypt("CurrentWeapon").decrypt(), &SDK::Cached::Offsets::FortPawn::CurrentWeapon, OffsetType::Class },
- OffsetSearch { skCrypt("BuildingWeakSpot").decrypt(), skCrypt("bHit").decrypt(), &SDK::Cached::Offsets::BuildingWeakSpot::WeakSpotInfoBitField, OffsetType::Class },
- OffsetSearch { skCrypt("FortWeapon").decrypt(), skCrypt("WeaponData").decrypt(), &SDK::Cached::Offsets::FortWeapon::WeaponData, OffsetType::Class },
+ OffsetSearch { skCrypt("FortPickup").decrypt(), skCrypt("PrimaryPickupItemEntry").decrypt(), &SDK::Cached::Offsets::FortPickup::PrimaryPickupItemEntry, nullptr },
+ OffsetSearch { skCrypt("FortItemDefinition").decrypt(), skCrypt("DisplayName").decrypt(), &SDK::Cached::Offsets::FortItemDefinition::DisplayName, nullptr },
+ OffsetSearch { skCrypt("FortItemDefinition").decrypt(), skCrypt("Tier").decrypt(), &SDK::Cached::Offsets::FortItemDefinition::Tier, nullptr },
+ OffsetSearch { skCrypt("Actor").decrypt(), skCrypt("RootComponent").decrypt(), &SDK::Cached::Offsets::Actor::RootComponent, nullptr },
+ OffsetSearch { skCrypt("SceneComponent").decrypt(), skCrypt("RelativeLocation").decrypt(), &SDK::Cached::Offsets::SceneComponent::RelativeLocation, nullptr },
+ OffsetSearch { skCrypt("Canvas").decrypt(), skCrypt("SizeX").decrypt(), &SDK::Cached::Offsets::Canvas::SizeX, nullptr },
+ OffsetSearch { skCrypt("Canvas").decrypt(), skCrypt("SizeY").decrypt(), &SDK::Cached::Offsets::Canvas::SizeY, nullptr },
+ OffsetSearch { skCrypt("FortPlayerStateAthena").decrypt(), skCrypt("TeamIndex").decrypt(), &SDK::Cached::Offsets::FortPlayerStateAthena::TeamIndex, nullptr },
+ OffsetSearch { skCrypt("FortPawn").decrypt(), skCrypt("CurrentWeapon").decrypt(), &SDK::Cached::Offsets::FortPawn::CurrentWeapon, nullptr },
+ OffsetSearch { skCrypt("FortPawn").decrypt(), skCrypt("bIsDying").decrypt(), &SDK::Cached::Offsets::FortPawn::bIsDying, &SDK::Cached::Masks::FortPawn::bIsDying },
+ OffsetSearch { skCrypt("BuildingWeakSpot").decrypt(), skCrypt("bHit").decrypt(), &SDK::Cached::Offsets::BuildingWeakSpot::WeakSpotInfoBitField, nullptr },
+ OffsetSearch { skCrypt("FortWeapon").decrypt(), skCrypt("WeaponData").decrypt(), &SDK::Cached::Offsets::FortWeapon::WeaponData, nullptr },
- OffsetSearch { skCrypt("FortItemEntry").decrypt(), skCrypt("ItemDefinition").decrypt(), &SDK::Cached::Offsets::FortItemEntry::ItemDefinition, OffsetType::Struct },
- OffsetSearch { skCrypt("MinimalViewInfo").decrypt(), skCrypt("Location").decrypt(), &SDK::Cached::Offsets::MinimalViewInfo::Location, OffsetType::Struct },
- OffsetSearch { skCrypt("MinimalViewInfo").decrypt(), skCrypt("Rotation").decrypt(), &SDK::Cached::Offsets::MinimalViewInfo::Rotation, OffsetType::Struct },
+ OffsetSearch { skCrypt("FortItemEntry").decrypt(), skCrypt("ItemDefinition").decrypt(), &SDK::Cached::Offsets::FortItemEntry::ItemDefinition, nullptr },
+ OffsetSearch { skCrypt("MinimalViewInfo").decrypt(), skCrypt("Location").decrypt(), &SDK::Cached::Offsets::MinimalViewInfo::Location, nullptr },
+ OffsetSearch { skCrypt("MinimalViewInfo").decrypt(), skCrypt("Rotation").decrypt(), &SDK::Cached::Offsets::MinimalViewInfo::Rotation, nullptr },
};
SDK::UObject::SetupObjects(Functions, Offsets);
}
+ // Init PostRender VFT index after due to it relying on one of the offsets found in the previous step
+ SDKInitializer::InitPRIndex();
+
Input::Init();
Features::FortPawnHelper::Bone::Init();
diff --git a/Fortnite Internal/Game/SDK/SDK.h b/Fortnite Internal/Game/SDK/SDK.h
index c7a435c..4cb4dfc 100644
--- a/Fortnite Internal/Game/SDK/SDK.h
+++ b/Fortnite Internal/Game/SDK/SDK.h
@@ -25,6 +25,7 @@ namespace SDK {
}
namespace FortPawn {
+ inline uintptr_t bIsDying;
inline uintptr_t CurrentWeapon;
}
@@ -38,7 +39,7 @@ namespace SDK {
namespace GameViewportClient {
inline uintptr_t World;
- inline uintptr_t GameInstance;
+ inline uintptr_t GameInstance; // DO NOT DELETE! Required for getting PostRender VFT index
}
namespace GameInstance {
@@ -155,6 +156,12 @@ namespace SDK {
inline uintptr_t FNameConstructor = 0x0;
inline uintptr_t LineTraceSingle = 0x0;
}
+
+ namespace Masks {
+ namespace FortPawn{
+ inline uintptr_t bIsDying;
+ }
+ }
}
bool IsValidPointer(uintptr_t Address);
diff --git a/Fortnite Internal/Game/SDK/SDKInitializer.cpp b/Fortnite Internal/Game/SDK/SDKInitializer.cpp
index 192fa0a..0d2355f 100644
--- a/Fortnite Internal/Game/SDK/SDKInitializer.cpp
+++ b/Fortnite Internal/Game/SDK/SDKInitializer.cpp
@@ -107,7 +107,7 @@ void SDKInitializer::InitPRIndex() {
if (!Obj)
continue;
- if (Obj->IsA(SDK::UGameViewportClient::StaticClass()) && !Obj->IsDefaultObject())
+ if (Obj->IsA(SDK::UGameViewportClient::StaticClass()) && Obj->IsDefaultObject() == false)
{
Vft = static_cast(Obj)->Vft;
break;
@@ -118,6 +118,8 @@ void SDKInitializer::InitPRIndex() {
THROW_ERROR(skCrypt("Failed to find VFT for UGameViewportClient!").decrypt(), false);
}
+ int bSuppressTransitionMessage = (int)SDK::Cached::Offsets::GameViewportClient::GameInstance + sizeof(void*);
+
auto Resolve32BitRelativeJump = [](void* FunctionPtr) -> uint8_t*
{
uint8_t* Address = reinterpret_cast(FunctionPtr);
@@ -137,9 +139,8 @@ void SDKInitializer::InitPRIndex() {
if (!Vft[i] || !Memory::IsInProcessRange(reinterpret_cast(Vft[i])))
continue;
- if (Memory::FindPatternInRange({ 0x80, 0xB9, 0x88, 0x00, 0x00, 0x00, 0x00 }, Resolve32BitRelativeJump(Vft[i]), 0x30))
+ if (Memory::FindPatternInRange({ 0x80, 0xB9, bSuppressTransitionMessage, 0x00, 0x00, 0x00, 0x00 }, Resolve32BitRelativeJump(Vft[i]), 0x30))
{
- // PostRender is always 1 index before DrawTransition
SDK::Cached::VFT::PostRender = i;
DEBUG_LOG(skCrypt("PostRender VFT index found: ").decrypt() + std::to_string(SDK::Cached::VFT::PostRender));
@@ -147,7 +148,7 @@ void SDKInitializer::InitPRIndex() {
}
}
- if (!SDK::Cached::VFT::PostRender) {
+ if (SDK::Cached::VFT::PostRender == 0x0) {
THROW_ERROR(skCrypt("Failed to find PostRender VFT index!").decrypt(), CRASH_ON_ERROR);
}
}
@@ -173,8 +174,8 @@ void SDKInitializer::InitPEIndex() {
if (!Vft[i] || !Memory::IsInProcessRange(reinterpret_cast(Vft[i])))
break;
- if (Memory::FindPatternInRange({ 0xF7, -0x1, SDK::UFunction::FunctionFlags, 0x0, 0x0, 0x0, 0x0, 0x04, 0x0, 0x0 }, Resolve32BitRelativeJump(Vft[i]), 0x400)
- && Memory::FindPatternInRange({ 0xF7, -0x1, SDK::UFunction::FunctionFlags, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0 }, Resolve32BitRelativeJump(Vft[i]), 0x400))
+ if (Memory::FindPatternInRange({ 0xF7, -0x1, (int32_t)SDK::UFunction::FunctionFlagsOffset, 0x0, 0x0, 0x0, 0x0, 0x04, 0x0, 0x0 }, Resolve32BitRelativeJump(Vft[i]), 0x400)
+ && Memory::FindPatternInRange({ 0xF7, -0x1, (int32_t)SDK::UFunction::FunctionFlagsOffset, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0 }, Resolve32BitRelativeJump(Vft[i]), 0x400))
{
SDK::Cached::VFT::ProcessEvent = i;
DEBUG_LOG(skCrypt("ProcessEvent VFT index found: ").decrypt() + std::to_string(SDK::Cached::VFT::ProcessEvent));
diff --git a/Fortnite Internal/Game/SDK/SDKInitializer.h b/Fortnite Internal/Game/SDK/SDKInitializer.h
index 94387fd..71f2b16 100644
--- a/Fortnite Internal/Game/SDK/SDKInitializer.h
+++ b/Fortnite Internal/Game/SDK/SDKInitializer.h
@@ -81,34 +81,35 @@ private:
*/
static void WalkVFT(const char* TargetFunctionName, void** VFT, void* TargetFunction, uintptr_t& VFTIndex, int SearchRange);
public:
- /* @brief Update the GObject offset (for finding UObjects) */
+ /* Update the GObject offset (for finding UObjects) */
static void InitGObjects();
- /* @brief Update the AppendString function offset (for converting FNames to strings) */
+ /* Update the AppendString function offset (for converting FNames to strings) */
static void InitAppendString();
- /* @brief Update the FNameConstructor function offset (for creating FNames) */
+ /* Update the FNameConstructor function offset (for creating FNames) */
static void InitFNameConstructor();
- /* @brief Update the LineTraceSingle function offset (for visible check) */
+ /* Update the LineTraceSingle function offset (for visible check) */
static void InitLineTraceSingle();
- /* @brief Update the PostRender VFT index (for engine rendering) */
+ /* Update the PostRender VFT index (for engine rendering) */
static void InitPRIndex();
- /* @brief Update the PostRender VFT index (for calling UFunctions) */
+ /* Update the PostRender VFT index (for calling UFunctions) */
static void InitPEIndex();
- /* @brief Update the GetPlayerViewpoint VFT index (for SilentAim) */
+ /* Update the GetPlayerViewpoint VFT index (for SilentAim) */
static void InitGPVIndex();
- /* @brief Update the GetViewpoint VFT index (for SilentAim) */
+ /* Update the GetViewpoint VFT index (for SilentAim) */
static void InitGVIndex();
+
// CREDITS TO: Dumper-7
- static int32_t FindCastFlagsOffset() {
+ static uint32 FindCastFlagsOffset() {
std::vector> infos = {
{ SDK::UObject::FindObjectFast(skCrypt("Actor").decrypt()), SDK::EClassCastFlags::Actor},
{ SDK::UObject::FindObjectFast(skCrypt("Class").decrypt()), SDK::EClassCastFlags::Field | SDK::EClassCastFlags::Struct | SDK::EClassCastFlags::Class }
@@ -116,7 +117,7 @@ public:
return Memory::FindOffset(infos);
}
// CREDITS TO: Dumper-7
- static int32_t FindDefaultObjectOffset() {
+ static uint32 FindDefaultObjectOffset() {
std::vector> infos = {
{ SDK::UObject::FindObjectFast(skCrypt("Object").decrypt()), SDK::UObject::FindObjectFast(skCrypt("Default__Object").decrypt()) },
{ SDK::UObject::FindObjectFast(skCrypt("Field").decrypt()), SDK::UObject::FindObjectFast(skCrypt("Default__Field").decrypt()) }
@@ -124,7 +125,7 @@ public:
return Memory::FindOffset(infos);
}
// CREDITS TO: Dumper-7
- static int32_t FindSuperOffset() {
+ static uint32 FindSuperOffset() {
std::vector> infos = {
{ SDK::UObject::FindObjectFast(skCrypt("Struct").decrypt()), SDK::UObject::FindObjectFast(skCrypt("Field").decrypt()) },
{ SDK::UObject::FindObjectFast(skCrypt("Class").decrypt()), SDK::UObject::FindObjectFast(skCrypt("Struct").decrypt()) }
@@ -138,14 +139,14 @@ public:
return Memory::FindOffset(infos);
}
// CREDITS TO: Dumper-7
- static int32_t FindChildPropertiesOffset() {
+ static uint32 FindChildPropertiesOffset() {
uint8* ObjA = (uint8*)SDK::UObject::FindObjectFast("Color");
uint8* ObjB = (uint8*)SDK::UObject::FindObjectFast("Guid");
- return Memory::GetValidPointerOffset(ObjA, ObjB, SDK::UStruct::SuperOffset + 0x10, 0x80);
+ return Memory::GetValidPointerOffset(ObjA, ObjB, SDK::UStruct::SuperOffset + (sizeof(void*) * 2), 0x80);
}
// CREDITS TO: Dumper-7
- static int32_t FindFunctionFlagsOffset() {
+ static uint32 FindFunctionFlagsOffset() {
std::vector> Infos;
Infos.push_back({ SDK::UObject::FindObjectFast("WasInputKeyJustPressed"), SDK::EFunctionFlags::Final | SDK::EFunctionFlags::Native | SDK::EFunctionFlags::Public | SDK::EFunctionFlags::BlueprintCallable | SDK::EFunctionFlags::BlueprintPure | SDK::EFunctionFlags::Const });
@@ -162,4 +163,34 @@ public:
return Memory::FindOffset(Infos);
}
+ // CREDITS TO: Dumper-7
+ static uint32 FindChildrenOffset() {
+ std::vector> Infos;
+
+ Infos.push_back({ SDK::UObject::FindObjectFast(skCrypt("PlayerController").decrypt()), SDK::UObject::FindObjectFastInOuter(skCrypt("WasInputKeyJustReleased").decrypt(), skCrypt("PlayerController").decrypt())});
+ Infos.push_back({ SDK::UObject::FindObjectFast(skCrypt("Controller").decrypt()), SDK::UObject::FindObjectFastInOuter(skCrypt("UnPossess").decrypt(), skCrypt("Controller").decrypt()) });
+
+ uint32 Ret = Memory::FindOffset(Infos);
+
+ if (Ret == 0x28)
+ {
+ Infos.clear();
+
+ Infos.push_back({ SDK::UObject::FindObjectFast(skCrypt("Vector").decrypt()), SDK::UObject::FindObjectFastInOuter(skCrypt("X").decrypt(), skCrypt("Vector").decrypt()) });
+ Infos.push_back({ SDK::UObject::FindObjectFast(skCrypt("Vector4").decrypt()), SDK::UObject::FindObjectFastInOuter(skCrypt("X").decrypt(), skCrypt("Vector4").decrypt()) });
+ Infos.push_back({ SDK::UObject::FindObjectFast(skCrypt("Vector2D").decrypt()), SDK::UObject::FindObjectFastInOuter(skCrypt("X").decrypt(), skCrypt("Vector2D").decrypt()) });
+ Infos.push_back({ SDK::UObject::FindObjectFast(skCrypt("Guid").decrypt()), SDK::UObject::FindObjectFastInOuter(skCrypt("A").decrypt(), skCrypt("Guid").decrypt()) });
+
+ return Memory::FindOffset(Infos);
+ }
+
+ return Ret;
+ }
+ // CREDITS TO: Dumper-7
+ static uint32 FindUFieldNextOffset() {
+ uint8_t* KismetSystemLibraryChild = reinterpret_cast(SDK::UObject::FindObjectFast(skCrypt("KismetSystemLibrary").decrypt())->Children());
+ uint8_t* KismetStringLibraryChild = reinterpret_cast(SDK::UObject::FindObjectFast(skCrypt("KismetStringLibrary").decrypt())->Children());
+
+ return Memory::GetValidPointerOffset(KismetSystemLibraryChild, KismetStringLibraryChild, 0x20 + 0x08, 0x48);
+ }
};
\ No newline at end of file
diff --git a/Fortnite Internal/Hooks/Callbacks/PostRender.cpp b/Fortnite Internal/Hooks/Callbacks/PostRender.cpp
index 19a37fc..12b2760 100644
--- a/Fortnite Internal/Hooks/Callbacks/PostRender.cpp
+++ b/Fortnite Internal/Hooks/Callbacks/PostRender.cpp
@@ -5,6 +5,7 @@
#include "../../Utilities/Math.h"
#include "../../Configs/Config.h"
+#include "../../Utilities/Logger.h"
void Hooks::PostRender::PostRender(uintptr_t this_, uintptr_t Canvas) {
if (!Canvas) {
@@ -17,7 +18,7 @@ void Hooks::PostRender::PostRender(uintptr_t this_, uintptr_t Canvas) {
Game::ScreenWidth = reinterpret_cast(Canvas)->SizeX();
Game::ScreenHeight = reinterpret_cast(Canvas)->SizeY();
- // Clamp the FOV to targetting FOV issues on extreme FOV's. This does make it innacurate on FOV's above 120, but when is that gonna happen?
+ // Clamp the FOV to fix target issues on extreme FOV's. This does make it innacurate 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)))));
Hooks::Tick();
diff --git a/Fortnite Internal/Utilities/Math.h b/Fortnite Internal/Utilities/Math.h
index 3ac495e..6f5204f 100644
--- a/Fortnite Internal/Utilities/Math.h
+++ b/Fortnite Internal/Utilities/Math.h
@@ -139,10 +139,6 @@ namespace Math {
return radians * (180.0f / M_PI);
}
- inline float Abs(float Value) {
- return (Value < 0.0f) ? -Value : Value;
- }
-
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);
diff --git a/OG-Fortnite-Cheat.rar b/OG-Fortnite-Cheat.rar
new file mode 100644
index 0000000..bea7338
Binary files /dev/null and b/OG-Fortnite-Cheat.rar differ