mirror of
https://github.com/Milxnor/Project-Reboot-3.0.git
synced 2026-01-13 02:42:22 +01:00
add butterfly event, add dropping to 1.11 and below,
This commit is contained in:
@@ -1062,7 +1062,7 @@ void AFortGameModeAthena::Athena_HandleStartingNewPlayerHook(AFortGameModeAthena
|
|||||||
if (Engine_Version <= 420)
|
if (Engine_Version <= 420)
|
||||||
{
|
{
|
||||||
static auto OverriddenBackpackSizeOffset = NewPlayer->GetOffset("OverriddenBackpackSize");
|
static auto OverriddenBackpackSizeOffset = NewPlayer->GetOffset("OverriddenBackpackSize");
|
||||||
// LOG_INFO(LogDev, "NewPlayer->Get<int>(OverriddenBackpackSizeOffset): {}", NewPlayer->Get<int>(OverriddenBackpackSizeOffset));
|
LOG_INFO(LogDev, "NewPlayer->Get<int>(OverriddenBackpackSizeOffset): {}", NewPlayer->Get<int>(OverriddenBackpackSizeOffset));
|
||||||
NewPlayer->Get<int>(OverriddenBackpackSizeOffset) = 5;
|
NewPlayer->Get<int>(OverriddenBackpackSizeOffset) = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,14 @@
|
|||||||
#include "FortPlayerController.h"
|
#include "FortPlayerController.h"
|
||||||
#include "FortPickup.h"
|
#include "FortPickup.h"
|
||||||
|
|
||||||
|
enum class EFortQuickBars : uint8_t
|
||||||
|
{
|
||||||
|
Primary = 0,
|
||||||
|
Secondary = 1,
|
||||||
|
Max_None = 2,
|
||||||
|
EFortQuickBars_MAX = 3
|
||||||
|
};
|
||||||
|
|
||||||
UFortItem* CreateItemInstance(AFortPlayerController* PlayerController, UFortItemDefinition* ItemDefinition, int Count)
|
UFortItem* CreateItemInstance(AFortPlayerController* PlayerController, UFortItemDefinition* ItemDefinition, int Count)
|
||||||
{
|
{
|
||||||
UFortItem* NewItemInstance = ItemDefinition->CreateTemporaryItemInstanceBP(Count);
|
UFortItem* NewItemInstance = ItemDefinition->CreateTemporaryItemInstanceBP(Count);
|
||||||
@@ -140,14 +148,6 @@ std::pair<std::vector<UFortItem*>, std::vector<UFortItem*>> AFortInventory::AddI
|
|||||||
|
|
||||||
if (QuickBars)
|
if (QuickBars)
|
||||||
{
|
{
|
||||||
enum class EFortQuickBars : uint8_t
|
|
||||||
{
|
|
||||||
Primary = 0,
|
|
||||||
Secondary = 1,
|
|
||||||
Max_None = 2,
|
|
||||||
EFortQuickBars_MAX = 3
|
|
||||||
};
|
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
FGuid Item; // (Parm, IsPlainOldData)
|
FGuid Item; // (Parm, IsPlainOldData)
|
||||||
@@ -256,6 +256,27 @@ bool AFortInventory::RemoveItem(const FGuid& ItemGuid, bool* bShouldUpdate, int
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto FortPlayerController = Cast<AFortPlayerController>(GetOwner());
|
||||||
|
|
||||||
|
if (FortPlayerController && Engine_Version < 420)
|
||||||
|
{
|
||||||
|
static auto QuickBarsOffset = FortPlayerController->GetOffset("QuickBars", false);
|
||||||
|
auto QuickBars = FortPlayerController->Get<AActor*>(QuickBarsOffset);
|
||||||
|
|
||||||
|
if (QuickBars)
|
||||||
|
{
|
||||||
|
static auto ServerRemoveItemInternalFn = FindObject<UFunction>("/Script/FortniteGame.FortQuickBars.ServerRemoveItemInternal");
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
FGuid Item; // (Parm, IsPlainOldData)
|
||||||
|
bool bFindReplacement; // (Parm, ZeroConstructor, IsPlainOldData)
|
||||||
|
bool bForce; // (Parm, ZeroConstructor, IsPlainOldData)
|
||||||
|
} AFortQuickBars_ServerRemoveItemInternal_Params{ItemGuid, false, true};
|
||||||
|
QuickBars->ProcessEvent(ServerRemoveItemInternalFn, &AFortQuickBars_ServerRemoveItemInternal_Params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// todo remove from weaponlist
|
// todo remove from weaponlist
|
||||||
|
|
||||||
if (bShouldUpdate)
|
if (bShouldUpdate)
|
||||||
|
|||||||
@@ -370,7 +370,7 @@ std::vector<LootDrop> PickLootDrops(FName TierGroupName, bool bPrint, int recurs
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Engine_Version < 420) // ahhh
|
if (Engine_Version <= 420) // ahhh
|
||||||
{
|
{
|
||||||
LTDTables.clear();
|
LTDTables.clear();
|
||||||
LPTables.clear();
|
LPTables.clear();
|
||||||
|
|||||||
@@ -875,14 +875,20 @@ void AFortPlayerController::ClientOnPawnDiedHook(AFortPlayerController* PlayerCo
|
|||||||
|
|
||||||
void AFortPlayerController::ServerBeginEditingBuildingActorHook(AFortPlayerController* PlayerController, ABuildingSMActor* BuildingActorToEdit)
|
void AFortPlayerController::ServerBeginEditingBuildingActorHook(AFortPlayerController* PlayerController, ABuildingSMActor* BuildingActorToEdit)
|
||||||
{
|
{
|
||||||
|
// LOG_INFO(LogDev, "ServerBeginEditingBuildingActorHook!");
|
||||||
|
|
||||||
if (!BuildingActorToEdit || !BuildingActorToEdit->IsPlayerPlaced())
|
if (!BuildingActorToEdit || !BuildingActorToEdit->IsPlayerPlaced())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto Pawn = PlayerController->GetMyFortPawn();
|
auto Pawn = PlayerController->GetMyFortPawn();
|
||||||
|
|
||||||
|
// LOG_INFO(LogDev, "ServerBeginEditingBuildingAc1341torHook!");
|
||||||
|
|
||||||
if (!Pawn)
|
if (!Pawn)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// LOG_INFO(LogDev, "ServerBeginEditingBuildingActorHook134!");
|
||||||
|
|
||||||
static auto EditToolDef = FindObject<UFortWeaponItemDefinition>("/Game/Items/Weapons/BuildingTools/EditTool.EditTool");
|
static auto EditToolDef = FindObject<UFortWeaponItemDefinition>("/Game/Items/Weapons/BuildingTools/EditTool.EditTool");
|
||||||
|
|
||||||
/* auto WorldInventory = PlayerController->GetWorldInventory();
|
/* auto WorldInventory = PlayerController->GetWorldInventory();
|
||||||
@@ -898,40 +904,19 @@ void AFortPlayerController::ServerBeginEditingBuildingActorHook(AFortPlayerContr
|
|||||||
if (auto EditTool = Cast<AFortWeap_EditingTool>(Pawn->EquipWeaponDefinition(EditToolDef, EditToolInstance->GetItemEntry()->GetItemGuid()))) */
|
if (auto EditTool = Cast<AFortWeap_EditingTool>(Pawn->EquipWeaponDefinition(EditToolDef, EditToolInstance->GetItemEntry()->GetItemGuid()))) */
|
||||||
if (auto EditTool = Cast<AFortWeap_EditingTool>(Pawn->EquipWeaponDefinition(EditToolDef, FGuid{})))
|
if (auto EditTool = Cast<AFortWeap_EditingTool>(Pawn->EquipWeaponDefinition(EditToolDef, FGuid{})))
|
||||||
{
|
{
|
||||||
|
// LOG_INFO(LogDev, "ServerBeginEditingBuild135415ingActorHook!");
|
||||||
|
|
||||||
BuildingActorToEdit->GetEditingPlayer() = PlayerController->GetPlayerState();
|
BuildingActorToEdit->GetEditingPlayer() = PlayerController->GetPlayerState();
|
||||||
// Onrep?
|
// Onrep?
|
||||||
|
|
||||||
EditTool->GetEditActor() = BuildingActorToEdit;
|
EditTool->GetEditActor() = BuildingActorToEdit;
|
||||||
// Onrep?
|
// Onrep?
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
|
|
||||||
/* void AFortPlayerController::ServerEditBuildingActorHook(AFortPlayerController* PlayerController, ABuildingSMActor* BuildingActorToEdit, UClass* NewBuildingClass, int RotationIterations, char bMirrored)
|
|
||||||
{
|
|
||||||
auto PlayerState = (AFortPlayerState*)PlayerController->GetPlayerState();
|
|
||||||
|
|
||||||
if (!BuildingActorToEdit || !NewBuildingClass || BuildingActorToEdit->IsDestroyed() || BuildingActorToEdit->GetEditingPlayer() != PlayerState)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// if (!PlayerState || PlayerState->GetTeamIndex() != BuildingActorToEdit->GetTeamIndex())
|
|
||||||
// return;
|
|
||||||
|
|
||||||
BuildingActorToEdit->GetEditingPlayer() = nullptr;
|
|
||||||
|
|
||||||
LOG_INFO(LogDev, "RotationIterations: {}", RotationIterations);
|
|
||||||
|
|
||||||
static ABuildingSMActor* (*BuildingSMActorReplaceBuildingActor)(ABuildingSMActor*, __int64, UClass*, int, int, uint8_t, AFortPlayerController*) =
|
|
||||||
decltype(BuildingSMActorReplaceBuildingActor)(Addresses::ReplaceBuildingActor);
|
|
||||||
|
|
||||||
if (auto BuildingActor = BuildingSMActorReplaceBuildingActor(BuildingActorToEdit, 1, NewBuildingClass,
|
|
||||||
BuildingActorToEdit->GetCurrentBuildingLevel(), RotationIterations, bMirrored, PlayerController))
|
|
||||||
{
|
{
|
||||||
BuildingActor->SetPlayerPlaced(true);
|
LOG_INFO(LogDev, "Failed to equip editing tool!");
|
||||||
|
|
||||||
// if (auto PlayerState = Cast<AFortPlayerStateAthena>(PlayerController->GetPlayerState()))
|
|
||||||
// BuildingActor->SetTeam(PlayerState->GetTeamIndex());
|
|
||||||
}
|
}
|
||||||
} */
|
}
|
||||||
|
|
||||||
void AFortPlayerController::ServerEditBuildingActorHook(UObject* Context, FFrame& Stack, void* Ret)
|
void AFortPlayerController::ServerEditBuildingActorHook(UObject* Context, FFrame& Stack, void* Ret)
|
||||||
{
|
{
|
||||||
@@ -954,7 +939,11 @@ void AFortPlayerController::ServerEditBuildingActorHook(UObject* Context, FFrame
|
|||||||
LOG_INFO(LogDev, "RotationIterations: {}", RotationIterations);
|
LOG_INFO(LogDev, "RotationIterations: {}", RotationIterations);
|
||||||
|
|
||||||
if (!BuildingActorToEdit || !NewBuildingClass || BuildingActorToEdit->IsDestroyed() || BuildingActorToEdit->GetEditingPlayer() != PlayerState)
|
if (!BuildingActorToEdit || !NewBuildingClass || BuildingActorToEdit->IsDestroyed() || BuildingActorToEdit->GetEditingPlayer() != PlayerState)
|
||||||
|
{
|
||||||
|
LOG_INFO(LogDev, "Cheater?");
|
||||||
|
LOG_INFO(LogDev, "BuildingActorToEdit->GetEditingPlayer(): {} PlayerState: {} NewBuildingClass: {} BuildingActorToEdit: {}", __int64(BuildingActorToEdit->GetEditingPlayer()), __int64(PlayerState), __int64(NewBuildingClass), __int64(BuildingActorToEdit));
|
||||||
return ServerEditBuildingActorOriginal(Context, Stack, Ret);
|
return ServerEditBuildingActorOriginal(Context, Stack, Ret);
|
||||||
|
}
|
||||||
|
|
||||||
// if (!PlayerState || PlayerState->GetTeamIndex() != BuildingActorToEdit->GetTeamIndex())
|
// if (!PlayerState || PlayerState->GetTeamIndex() != BuildingActorToEdit->GetTeamIndex())
|
||||||
//return ServerEditBuildingActorOriginal(Context, Frame, Ret);
|
//return ServerEditBuildingActorOriginal(Context, Frame, Ret);
|
||||||
|
|||||||
@@ -128,6 +128,8 @@ void AFortPlayerControllerAthena::ServerReadyToStartMatchHook(AFortPlayerControl
|
|||||||
{
|
{
|
||||||
auto& QuickBars = PlayerController->Get<AActor*>(QuickBarsOffset);
|
auto& QuickBars = PlayerController->Get<AActor*>(QuickBarsOffset);
|
||||||
|
|
||||||
|
LOG_INFO(LogDev, "QuickBarsOld: {}", __int64(QuickBars));
|
||||||
|
|
||||||
if (QuickBars)
|
if (QuickBars)
|
||||||
return ServerReadyToStartMatchOriginal(PlayerController);
|
return ServerReadyToStartMatchOriginal(PlayerController);
|
||||||
|
|
||||||
@@ -135,6 +137,8 @@ void AFortPlayerControllerAthena::ServerReadyToStartMatchHook(AFortPlayerControl
|
|||||||
|
|
||||||
QuickBars = GetWorld()->SpawnActor<AActor>(FortQuickBarsClass);
|
QuickBars = GetWorld()->SpawnActor<AActor>(FortQuickBarsClass);
|
||||||
|
|
||||||
|
LOG_INFO(LogDev, "QuickBarsNew: {}", __int64(QuickBars));
|
||||||
|
|
||||||
if (!QuickBars)
|
if (!QuickBars)
|
||||||
return ServerReadyToStartMatchOriginal(PlayerController);
|
return ServerReadyToStartMatchOriginal(PlayerController);
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ void AFortWeapon::OnPlayImpactFXHook(AFortWeapon* Weapon, __int64 HitResult, uin
|
|||||||
{
|
{
|
||||||
// grappler
|
// grappler
|
||||||
|
|
||||||
|
LOG_INFO(LogDev, "AAA!");
|
||||||
|
|
||||||
auto Pawn = Cast<AFortPawn>(Weapon->GetOwner());
|
auto Pawn = Cast<AFortPawn>(Weapon->GetOwner());
|
||||||
|
|
||||||
if (!Pawn)
|
if (!Pawn)
|
||||||
|
|||||||
@@ -334,9 +334,9 @@ void Offsets::FindAll()
|
|||||||
if (Engine_Version == 416) // checked on 1.7.2 & 1.8
|
if (Engine_Version == 416) // checked on 1.7.2 & 1.8
|
||||||
Offsets::ReplicationFrame = 0x288;
|
Offsets::ReplicationFrame = 0x288;
|
||||||
if (Fortnite_Version == 2.42)
|
if (Fortnite_Version == 2.42)
|
||||||
Offsets::ReplicationFrame = 0xB2;
|
Offsets::ReplicationFrame = 0x2C8;
|
||||||
if (Fortnite_Version == 2.5)
|
if (Fortnite_Version == 2.5)
|
||||||
Offsets::ReplicationFrame = 0xCA;
|
Offsets::ReplicationFrame = 0x328;
|
||||||
if (Fortnite_Version == 1.11)
|
if (Fortnite_Version == 1.11)
|
||||||
Offsets::ReplicationFrame = 0x2C8;
|
Offsets::ReplicationFrame = 0x2C8;
|
||||||
|
|
||||||
@@ -425,6 +425,11 @@ std::vector<uint64> Addresses::GetFunctionsToNull()
|
|||||||
toNull.push_back(Memcury::Scanner::FindPattern("40 55 57 41 57 48 8D 6C 24 ? 48 81 EC ? ? ? ? 80 3D ? ? ? ? ? 0F B6 FA 44 8B F9 74 3B 80 3D ? ? ? ? ? 0F").Get());
|
toNull.push_back(Memcury::Scanner::FindPattern("40 55 57 41 57 48 8D 6C 24 ? 48 81 EC ? ? ? ? 80 3D ? ? ? ? ? 0F B6 FA 44 8B F9 74 3B 80 3D ? ? ? ? ? 0F").Get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Fortnite_Version == 16.50)
|
||||||
|
{
|
||||||
|
toNull.push_back(Memcury::Scanner::FindPattern("48 8B C4 48 89 58 08 48 89 70 10 48 89 78 18 4C 89 60 20 55 41 56 41 57 48 8B EC 48 83 EC 60 49 8B D9 45 8A F8 4C 8B F2 48").Get()); // no reservation in gakme
|
||||||
|
}
|
||||||
|
|
||||||
if (std::floor(Fortnite_Version) == 17)
|
if (std::floor(Fortnite_Version) == 17)
|
||||||
{
|
{
|
||||||
// toNull.push_back(Memcury::Scanner::FindPattern("48 8B C4 48 89 70 08 48 89 78 10 55 41 54 41 55 41 56 41 57 48 8D 68 A1 48 81 EC ? ? ? ? 45 33 ED").Get()); // collectgarbage
|
// toNull.push_back(Memcury::Scanner::FindPattern("48 8B C4 48 89 70 08 48 89 78 10 55 41 54 41 55 41 56 41 57 48 8D 68 A1 48 81 EC ? ? ? ? 45 33 ED").Get()); // collectgarbage
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ static void SetZoneToIndexHook(AFortGameModeAthena* GameModeAthena, int Override
|
|||||||
|
|
||||||
LOG_INFO(LogDev, "SafeZoneDefinitionOffset: 0x{:x}", SafeZoneDefinitionOffset);
|
LOG_INFO(LogDev, "SafeZoneDefinitionOffset: 0x{:x}", SafeZoneDefinitionOffset);
|
||||||
|
|
||||||
static auto ZoneDurationsOffset = std::floor(Fortnite_Version) == 17 ? 0x258 : std::floor(Fortnite_Version) >= 18 ? 0x248 : 0x1F8;
|
static auto ZoneDurationsOffset = Fortnite_Version == 16.50 || std::floor(Fortnite_Version) == 17 ? 0x258 : std::floor(Fortnite_Version) >= 18 ? 0x248 : 0x1F8;
|
||||||
static auto ZoneHoldDurationsOffset = ZoneDurationsOffset - 0x10;
|
static auto ZoneHoldDurationsOffset = ZoneDurationsOffset - 0x10;
|
||||||
|
|
||||||
auto& ZoneDurations = *(TArray<float>*)(__int64(SafeZoneDefinition) + ZoneDurationsOffset);
|
auto& ZoneDurations = *(TArray<float>*)(__int64(SafeZoneDefinition) + ZoneDurationsOffset);
|
||||||
@@ -258,7 +258,8 @@ void ProcessEventHook(UObject* Object, UFunction* Function, void* Parameters)
|
|||||||
!strstr(ObjectName.c_str(), "CBGA_GreenGlop_WithGrav_C") &&
|
!strstr(ObjectName.c_str(), "CBGA_GreenGlop_WithGrav_C") &&
|
||||||
!strstr(ObjectName.c_str(), "FlopperSpawn") &&
|
!strstr(ObjectName.c_str(), "FlopperSpawn") &&
|
||||||
!strstr(FunctionFullName.c_str(), "GCNL_EnvCampFire_Fire_C") &&
|
!strstr(FunctionFullName.c_str(), "GCNL_EnvCampFire_Fire_C") &&
|
||||||
!strstr(FunctionName.c_str(), "BlueprintGetAllHighlightableComponents"))
|
!strstr(FunctionName.c_str(), "BlueprintGetAllHighlightableComponents") &&
|
||||||
|
!strstr(FunctionFullName.c_str(), "Primitive_Structure_AmbAudioComponent"))
|
||||||
{
|
{
|
||||||
LOG_INFO(LogDev, "Function called: {} with {}", FunctionFullName, ObjectName);
|
LOG_INFO(LogDev, "Function called: {} with {}", FunctionFullName, ObjectName);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ DWORD WINAPI Main(LPVOID)
|
|||||||
static auto GameModeDefault = FindObject<AFortGameModeAthena>(L"/Script/FortniteGame.Default__FortGameModeAthena");
|
static auto GameModeDefault = FindObject<AFortGameModeAthena>(L"/Script/FortniteGame.Default__FortGameModeAthena");
|
||||||
static auto FortPlayerControllerZoneDefault = FindObject<AFortPlayerController>(L"/Script/FortniteGame.Default__FortPlayerControllerZone");
|
static auto FortPlayerControllerZoneDefault = FindObject<AFortPlayerController>(L"/Script/FortniteGame.Default__FortPlayerControllerZone");
|
||||||
static auto FortPlayerControllerAthenaDefault = FindObject<AFortPlayerControllerAthena>(L"/Script/FortniteGame.Default__FortPlayerControllerAthena"); // FindObject<UClass>(L"/Game/Athena/Athena_PlayerController.Default__Athena_PlayerController_C");
|
static auto FortPlayerControllerAthenaDefault = FindObject<AFortPlayerControllerAthena>(L"/Script/FortniteGame.Default__FortPlayerControllerAthena"); // FindObject<UClass>(L"/Game/Athena/Athena_PlayerController.Default__Athena_PlayerController_C");
|
||||||
static auto FortPlayerPawnAthenaDefault = FindObject<AFortPlayerPawn>(L"/Game/Athena/PlayerPawn_Athena.Default__PlayerPawn_Athena_C");
|
static auto FortPlayerPawnAthenaDefault = FindObject<AFortPlayerPawn>(L"/Script/FortniteGame.Default__FortPlayerPawnAthena"); // FindObject<AFortPlayerPawn>(L"/Game/Athena/PlayerPawn_Athena.Default__PlayerPawn_Athena_C");
|
||||||
static auto FortAbilitySystemComponentAthenaDefault = FindObject<UObject>(L"/Script/FortniteGame.Default__FortAbilitySystemComponentAthena");
|
static auto FortAbilitySystemComponentAthenaDefault = FindObject<UObject>(L"/Script/FortniteGame.Default__FortAbilitySystemComponentAthena");
|
||||||
static auto FortPlayerStateAthenaDefault = FindObject<AFortPlayerStateAthena>(L"/Script/FortniteGame.Default__FortPlayerStateAthena");
|
static auto FortPlayerStateAthenaDefault = FindObject<AFortPlayerStateAthena>(L"/Script/FortniteGame.Default__FortPlayerStateAthena");
|
||||||
static auto FortKismetLibraryDefault = FindObject<UFortKismetLibrary>(L"/Script/FortniteGame.Default__FortKismetLibrary");
|
static auto FortKismetLibraryDefault = FindObject<UFortKismetLibrary>(L"/Script/FortniteGame.Default__FortKismetLibrary");
|
||||||
@@ -271,22 +271,27 @@ DWORD WINAPI Main(LPVOID)
|
|||||||
Hooking::MinHook::Hook(FortWeaponDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortWeapon.ServerReleaseWeaponAbility"),
|
Hooking::MinHook::Hook(FortWeaponDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortWeapon.ServerReleaseWeaponAbility"),
|
||||||
AFortWeapon::ServerReleaseWeaponAbilityHook, (PVOID*)&AFortWeapon::ServerReleaseWeaponAbilityOriginal, false, true);
|
AFortWeapon::ServerReleaseWeaponAbilityHook, (PVOID*)&AFortWeapon::ServerReleaseWeaponAbilityOriginal, false, true);
|
||||||
|
|
||||||
auto OnPlayImpactFXFunctionPtr = Memcury::Scanner::FindStringRef(L"OnPlayImpactFX", true, 0).ScanFor({ 0x48, 0x8D, 0x0D }).RelativeOffset(3).GetAs<void*>();
|
auto OnPlayImpactFXStringRef = Memcury::Scanner::FindStringRef(L"OnPlayImpactFX", true, 0);
|
||||||
auto OnPlayImpactFXPtrRef = Memcury::Scanner::FindPointerRef(OnPlayImpactFXFunctionPtr).Get();
|
|
||||||
__int64 OnPlayImpactFXAddr = 0;
|
__int64 OnPlayImpactFXAddr = 0;
|
||||||
|
|
||||||
for (int i = 0; i < 2000; i++)
|
if (OnPlayImpactFXStringRef.Get())
|
||||||
{
|
{
|
||||||
if (*(uint8_t*)(uint8_t*)(OnPlayImpactFXPtrRef - i) == 0x48 && *(uint8_t*)(uint8_t*)(OnPlayImpactFXPtrRef - i + 1) == 0x89 && *(uint8_t*)(uint8_t*)(OnPlayImpactFXPtrRef - i + 2) == 0x5C)
|
auto OnPlayImpactFXFunctionPtr = OnPlayImpactFXStringRef.ScanFor({ 0x48, 0x8D, 0x0D }).RelativeOffset(3).GetAs<void*>();
|
||||||
{
|
auto OnPlayImpactFXPtrRef = Memcury::Scanner::FindPointerRef(OnPlayImpactFXFunctionPtr).Get();
|
||||||
OnPlayImpactFXAddr = OnPlayImpactFXPtrRef - i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*(uint8_t*)(uint8_t*)(OnPlayImpactFXPtrRef - i) == 0x4C && *(uint8_t*)(uint8_t*)(OnPlayImpactFXPtrRef - i + 1) == 0x8B && *(uint8_t*)(uint8_t*)(OnPlayImpactFXPtrRef - i + 2) == 0xDC)
|
for (int i = 0; i < 2000; i++)
|
||||||
{
|
{
|
||||||
OnPlayImpactFXAddr = OnPlayImpactFXPtrRef - i;
|
if (*(uint8_t*)(uint8_t*)(OnPlayImpactFXPtrRef - i) == 0x48 && *(uint8_t*)(uint8_t*)(OnPlayImpactFXPtrRef - i + 1) == 0x89 && *(uint8_t*)(uint8_t*)(OnPlayImpactFXPtrRef - i + 2) == 0x5C)
|
||||||
break;
|
{
|
||||||
|
OnPlayImpactFXAddr = OnPlayImpactFXPtrRef - i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*(uint8_t*)(uint8_t*)(OnPlayImpactFXPtrRef - i) == 0x4C && *(uint8_t*)(uint8_t*)(OnPlayImpactFXPtrRef - i + 1) == 0x8B && *(uint8_t*)(uint8_t*)(OnPlayImpactFXPtrRef - i + 2) == 0xDC)
|
||||||
|
{
|
||||||
|
OnPlayImpactFXAddr = OnPlayImpactFXPtrRef - i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -295,7 +300,8 @@ DWORD WINAPI Main(LPVOID)
|
|||||||
|
|
||||||
Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerController.ServerDropAllItems"),
|
Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerController.ServerDropAllItems"),
|
||||||
AFortPlayerController::ServerDropAllItemsHook, nullptr, false);
|
AFortPlayerController::ServerDropAllItemsHook, nullptr, false);
|
||||||
Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerController.ServerAttemptInventoryDrop"),
|
Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault,
|
||||||
|
FindObject<UFunction>("/Script/FortniteGame.FortPlayerController.ServerSpawnInventoryDrop") ? FindObject<UFunction>("/Script/FortniteGame.FortPlayerController.ServerSpawnInventoryDrop") : FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerController.ServerAttemptInventoryDrop"),
|
||||||
AFortPlayerController::ServerAttemptInventoryDropHook, nullptr, false);
|
AFortPlayerController::ServerAttemptInventoryDropHook, nullptr, false);
|
||||||
Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerController.ServerCheat"),
|
Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerController.ServerCheat"),
|
||||||
ServerCheatHook, nullptr, false);
|
ServerCheatHook, nullptr, false);
|
||||||
|
|||||||
@@ -21,6 +21,29 @@ struct Event
|
|||||||
|
|
||||||
static inline std::vector<Event> Events =
|
static inline std::vector<Event> Events =
|
||||||
{
|
{
|
||||||
|
Event
|
||||||
|
(
|
||||||
|
"Butterfly",
|
||||||
|
"/Game/Athena/Prototype/Blueprints/Island/BP_Butterfly.BP_Butterfly_C",
|
||||||
|
"/Game/Athena/Prototype/Blueprints/Island/BP_Butterfly.BP_Butterfly_C.LoadButterflySublevel",
|
||||||
|
1,
|
||||||
|
{
|
||||||
|
},
|
||||||
|
{
|
||||||
|
{
|
||||||
|
{
|
||||||
|
true,
|
||||||
|
"/Game/Athena/Prototype/Blueprints/Island/BP_Butterfly.BP_Butterfly_C.ButterflySequence"
|
||||||
|
},
|
||||||
|
|
||||||
|
0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"/Game/Athena/Prototype/Blueprints/Island/BP_Butterfly.BP_Butterfly_C",
|
||||||
|
"/Game/Athena/Playlists/Playlist_DefaultSolo.Playlist_DefaultSolo",
|
||||||
|
6.21
|
||||||
|
),
|
||||||
Event
|
Event
|
||||||
(
|
(
|
||||||
"Astronomical",
|
"Astronomical",
|
||||||
@@ -57,7 +80,8 @@ static inline std::vector<Event> Events =
|
|||||||
"/Game/Athena/Playlists/Music/Playlist_Music_High.Playlist_Music_High",
|
"/Game/Athena/Playlists/Music/Playlist_Music_High.Playlist_Music_High",
|
||||||
12.41
|
12.41
|
||||||
),
|
),
|
||||||
Event(
|
Event
|
||||||
|
(
|
||||||
"Devourer of Worlds",
|
"Devourer of Worlds",
|
||||||
"/Junior/Blueprints/BP_Junior_Loader.BP_Junior_Loader_C",
|
"/Junior/Blueprints/BP_Junior_Loader.BP_Junior_Loader_C",
|
||||||
"/Junior/Blueprints/BP_Junior_Loader.BP_Junior_Loader_C.LoadJuniorLevel",
|
"/Junior/Blueprints/BP_Junior_Loader.BP_Junior_Loader_C.LoadJuniorLevel",
|
||||||
|
|||||||
@@ -85,7 +85,14 @@ static inline uint64 FindStaticFindObject(int StringSkip = 1)
|
|||||||
return Memcury::Scanner::FindPattern("4C 8B DC 57 48 81 EC ? ? ? ? 80 3D ? ? ? ? ? 49 89 6B F0 49 89 73 E8").Get();
|
return Memcury::Scanner::FindPattern("4C 8B DC 57 48 81 EC ? ? ? ? 80 3D ? ? ? ? ? 49 89 6B F0 49 89 73 E8").Get();
|
||||||
|
|
||||||
if (Engine_Version == 419)
|
if (Engine_Version == 419)
|
||||||
return Memcury::Scanner::FindPattern("4C 8B DC 49 89 5B 08 49 89 6B 18 49 89 73 20 57 41 56 41 57 48 83 EC 60 80 3D").Get();
|
{
|
||||||
|
auto iasdfk = Memcury::Scanner::FindPattern("4C 8B DC 49 89 5B 08 49 89 6B 18 49 89 73 20 57 41 56 41 57 48 83 EC 60 80 3D", false).Get();
|
||||||
|
|
||||||
|
if (!iasdfk)
|
||||||
|
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 74 24 ? 55 57 41 54 41 56 41 57 48 8B EC 48 83 EC 60 80 3D ? ? ? ? ? 45 0F B6 F1 49 8B F8").Get();
|
||||||
|
|
||||||
|
return iasdfk;
|
||||||
|
}
|
||||||
|
|
||||||
auto Addr = Memcury::Scanner::FindStringRef(L"Illegal call to StaticFindObject() while serializing object data!", true, StringSkip, Engine_Version >= 427);
|
auto Addr = Memcury::Scanner::FindStringRef(L"Illegal call to StaticFindObject() while serializing object data!", true, StringSkip, Engine_Version >= 427);
|
||||||
auto Final = FindBytes(Addr, { 0x48, 0x89, 0x5C }, 255, 0, true, 0, false); // Addr.ScanFor(bytes, false).Get();
|
auto Final = FindBytes(Addr, { 0x48, 0x89, 0x5C }, 255, 0, true, 0, false); // Addr.ScanFor(bytes, false).Get();
|
||||||
@@ -922,8 +929,24 @@ static inline uint64 FindChangeGameSessionId()
|
|||||||
|
|
||||||
static inline uint64 FindDispatchRequest()
|
static inline uint64 FindDispatchRequest()
|
||||||
{
|
{
|
||||||
auto Addr = Memcury::Scanner::FindStringRef(L"MCP-Profile: Dispatching request to %s", true, 0, Fortnite_Version >= 19);
|
auto Addrr = Memcury::Scanner::FindStringRef(L"MCP-Profile: Dispatching request to %s", true, 0, Fortnite_Version >= 19).Get();
|
||||||
return FindBytes(Addr, std::floor(Fortnite_Version) == 18 ? std::vector<uint8_t>{0x48, 0x8B, 0xC4 } : std::vector<uint8_t>{ 0x48, 0x89, 0x5C }, 300, 0, true);
|
|
||||||
|
for (int i = 0; i < 400; i++)
|
||||||
|
{
|
||||||
|
if (*(uint8_t*)(uint8_t*)(Addrr - i) == 0x48 && *(uint8_t*)(uint8_t*)(Addrr - i + 1) == 0x89 && *(uint8_t*)(uint8_t*)(Addrr - i + 2) == 0x5C)
|
||||||
|
{
|
||||||
|
return Addrr - i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*(uint8_t*)(uint8_t*)(Addrr - i) == 0x48 && *(uint8_t*)(uint8_t*)(Addrr - i + 1) == 0x8B && *(uint8_t*)(uint8_t*)(Addrr - i + 2) == 0xC4)
|
||||||
|
{
|
||||||
|
return Addrr - i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// return FindBytes(Addr, std::floor(Fortnite_Version) == 18 ? std::vector<uint8_t>{0x48, 0x8B, 0xC4 } : std::vector<uint8_t>{ 0x48, 0x89, 0x5C }, 300, 0, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint64 FindMcpIsDedicatedServerOffset()
|
static inline uint64 FindMcpIsDedicatedServerOffset()
|
||||||
@@ -1185,12 +1208,14 @@ static inline uint64 FindGiveAbilityAndActivateOnce()
|
|||||||
|
|
||||||
static inline uint64 FindGiveAbility()
|
static inline uint64 FindGiveAbility()
|
||||||
{
|
{
|
||||||
if (Engine_Version == 416)
|
if (Engine_Version <= 420)
|
||||||
|
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 56 57 41 56 48 83 EC 20 83 B9").Get();
|
||||||
|
/* if (Engine_Version == 416)
|
||||||
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 56 57 41 56 48 83 EC 20 83 B9").Get();
|
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 56 57 41 56 48 83 EC 20 83 B9").Get();
|
||||||
if (Fortnite_Version == 1.11)
|
if (Fortnite_Version == 1.11)
|
||||||
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 56 57 41 56 48 83 EC 20 83 B9 ? ? ? ? ? 49 8B F0").Get();
|
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 56 57 41 56 48 83 EC 20 83 B9 ? ? ? ? ? 49 8B F0").Get();
|
||||||
if (Engine_Version == 420)
|
if (Engine_Version == 420)
|
||||||
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 56 57 41 56 48 83 EC 20 83 B9 ? ? ? ? ? 49 8B F0 4C 8B F2 48 8B D9 7E 61").Get();
|
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 56 57 41 56 48 83 EC 20 83 B9 ? ? ? ? ? 49 8B F0 4C 8B F2 48 8B D9 7E 61").Get(); */
|
||||||
if (Engine_Version == 421)
|
if (Engine_Version == 421)
|
||||||
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 6C 24 ? 48 89 7C 24 ? 41 56 48 83 EC 20 83 B9 ? ? ? ? ? 49 8B E8 4C 8B F2").Get();
|
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 6C 24 ? 48 89 7C 24 ? 41 56 48 83 EC 20 83 B9 ? ? ? ? ? 49 8B E8 4C 8B F2").Get();
|
||||||
if (Engine_Version == 500)
|
if (Engine_Version == 500)
|
||||||
|
|||||||
Reference in New Issue
Block a user