mirror of
https://github.com/EricPlayZ/EGameTools.git
synced 2025-07-18 09:27:51 +08:00
fixed teleport to waypoint issues
This commit is contained in:
@ -219,6 +219,10 @@ namespace GamePH {
|
||||
prevFreeCam = false;
|
||||
return 0;
|
||||
}
|
||||
if (Menu::Teleport::waypointIsSet && !*Menu::Teleport::waypointIsSet && Menu::Teleport::justTeleportedToWaypoint) {
|
||||
Menu::Teleport::justTeleportedToWaypoint = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (Menu::Player::godMode.GetValue())
|
||||
return 0;
|
||||
@ -278,7 +282,7 @@ namespace GamePH {
|
||||
DWORD64 result = SetNewWaypointLocationHook.pOriginal(pLogicalPlayer, a2, newWaypointLoc);
|
||||
Menu::Teleport::waypointCoords = *newWaypointLoc;
|
||||
if (Offsets::Get_SetNewWaypointLocationWaypointIsSetBoolInstr()) {
|
||||
const UINT offset = *Offsets::Get_SetNewWaypointLocationWaypointIsSetBoolInstr();
|
||||
const DWORD offset = *Offsets::Get_SetNewWaypointLocationWaypointIsSetBoolInstr();
|
||||
Menu::Teleport::waypointIsSet = reinterpret_cast<bool*>(pLogicalPlayer + offset);
|
||||
}
|
||||
return result;
|
||||
|
@ -16,6 +16,7 @@ namespace Menu {
|
||||
|
||||
Vector3 waypointCoords{};
|
||||
bool* waypointIsSet = nullptr;
|
||||
bool justTeleportedToWaypoint = false;
|
||||
static Vector3 teleportCoords{};
|
||||
|
||||
KeyBindOption teleportToSelectedLocation{ VK_F9 };
|
||||
@ -130,38 +131,40 @@ namespace Menu {
|
||||
teleportCoords = playerCharacter->playerPos;
|
||||
}
|
||||
}
|
||||
static void TeleportPlayerTo(const Vector3& pos) {
|
||||
static bool TeleportPlayerTo(const Vector3& pos) {
|
||||
if (isTeleportationDisabled())
|
||||
return;
|
||||
return false;
|
||||
|
||||
if (pos.isDefault())
|
||||
return;
|
||||
return false;
|
||||
|
||||
Engine::CBulletPhysicsCharacter* playerCharacter = Engine::CBulletPhysicsCharacter::Get();
|
||||
|
||||
if (Player::freezePlayer.GetValue()) {
|
||||
if (!playerCharacter)
|
||||
return;
|
||||
return false;
|
||||
|
||||
playerCharacter->posBeforeFreeze = pos;
|
||||
playerCharacter->MoveCharacter(pos);
|
||||
} else if (Camera::freeCam.GetValue()) {
|
||||
GamePH::FreeCamera* freeCam = GamePH::FreeCamera::Get();
|
||||
if (!freeCam)
|
||||
return;
|
||||
return false;
|
||||
|
||||
Vector3 camPos{};
|
||||
freeCam->GetPosition(&camPos);
|
||||
if (camPos.isDefault())
|
||||
return;
|
||||
return false;
|
||||
|
||||
// need to implement camera teleportation here :(
|
||||
} else {
|
||||
if (!playerCharacter)
|
||||
return;
|
||||
return false;
|
||||
|
||||
playerCharacter->MoveCharacter(pos);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void UpdateTeleportPos() {
|
||||
@ -202,7 +205,7 @@ namespace Menu {
|
||||
teleportToSelectedLocation.SetPrevValue(teleportToSelectedLocation.GetValue());
|
||||
}
|
||||
if (teleportToWaypoint.HasChanged()) {
|
||||
TeleportPlayerTo(waypointCoords);
|
||||
justTeleportedToWaypoint = TeleportPlayerTo(waypointCoords);
|
||||
teleportToWaypoint.SetPrevValue(teleportToWaypoint.GetValue());
|
||||
}
|
||||
if (teleportToCoords.HasChanged()) {
|
||||
@ -391,7 +394,7 @@ namespace Menu {
|
||||
ImGui::PopItemWidth();
|
||||
|
||||
if (ImGui::ButtonHotkey("Teleport to Waypoint", &teleportToWaypoint, "Teleports player to waypoint.\nWARNING: If the waypoint is selected to track an object/item on the map, Teleport to Waypoint will not work, if so just set the waypoint nearby instead.\nWARNING: Your player height won't change when teleporting, so make sure you catch yourself if you fall under the map because of the teleportation") && waypointIsSet && *waypointIsSet)
|
||||
TeleportPlayerTo(waypointCoords);
|
||||
justTeleportedToWaypoint = TeleportPlayerTo(waypointCoords);
|
||||
ImGui::SameLine();
|
||||
if (ImGui::ButtonHotkey("Teleport to Coords", &teleportToCoords, "Teleports player to the coords specified in the input boxes above"))
|
||||
TeleportPlayerTo(teleportCoords);
|
||||
|
@ -11,11 +11,12 @@ namespace Menu {
|
||||
extern std::vector<TeleportLocation> savedTeleportLocations;
|
||||
|
||||
extern Vector3 waypointCoords;
|
||||
extern bool* waypointIsSet;
|
||||
extern bool justTeleportedToWaypoint;
|
||||
|
||||
extern KeyBindOption teleportToSelectedLocation;
|
||||
extern KeyBindOption teleportToCoords;
|
||||
extern KeyBindOption teleportToWaypoint;
|
||||
extern bool* waypointIsSet;
|
||||
|
||||
extern void UpdateTeleportLocationVisualNames();
|
||||
extern std::vector<TeleportLocation> ParseTeleportLocations(const std::string& input);
|
||||
|
@ -101,7 +101,7 @@ struct Offsets {
|
||||
AddOffset(PlayerGetInventoryMoney, "gamedll_ph_x64_rwdi.dll", "8B C2 48 8B 44 C1", Utils::SigScan::PatternType::Address, LPVOID)
|
||||
AddOffset(HandleInventoryItemsAmount, "gamedll_ph_x64_rwdi.dll", "48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC ?? 8B 29", Utils::SigScan::PatternType::Address, LPVOID)
|
||||
AddOffset(SetNewWaypointLocation, "gamedll_ph_x64_rwdi.dll", "85 D2 78 ?? 48 89 74 24 ?? 57 48 83 EC ?? 49 8B F8", Utils::SigScan::PatternType::Address, LPVOID)
|
||||
AddOffset(SetNewWaypointLocationWaypointIsSetBoolInstr, "gamedll_ph_x64_rwdi.dll", "C6 84 33 [?? ?? ?? ?? 01 48 8B 5C 24", Utils::SigScan::PatternType::Address, DWORD64*)
|
||||
AddOffset(SetNewWaypointLocationWaypointIsSetBoolInstr, "gamedll_ph_x64_rwdi.dll", "C6 84 33 [?? ?? ?? ?? 01 48 8B 5C 24", Utils::SigScan::PatternType::Address, DWORD*)
|
||||
//AddOffset(CompareAndUpdateFloat, "gamedll_ph_x64_rwdi.dll", "0F 2F C1 73 ?? 0F 28 C1 C3", Utils::SigScan::PatternType::Address, LPVOID)
|
||||
//AddOffset(HandlePlayerImmunity, "gamedll_ph_x64_rwdi.dll", "48 8B C4 53 56 57 41 56 41 57", Utils::SigScan::PatternType::Address, LPVOID)
|
||||
//AddOffset(HandlePlayerImmunity2, "gamedll_ph_x64_rwdi.dll", "40 55 56 41 56 41 57 48 8D 6C 24 ?? 48 81 EC ?? ?? ?? ?? 48 8B F1 45 0F B6 F0", Utils::SigScan::PatternType::Address, LPVOID)
|
||||
|
Reference in New Issue
Block a user