add butterfly event, add dropping to 1.11 and below,

This commit is contained in:
Milxnor
2023-04-02 14:42:00 -04:00
parent f41b18f875
commit c6bbaccf7f
11 changed files with 136 additions and 59 deletions

View File

@@ -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;
} }

View File

@@ -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)

View File

@@ -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();

View File

@@ -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);

View File

@@ -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);

View File

@@ -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)

View File

@@ -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

View File

@@ -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);
} }

View File

@@ -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);

View File

@@ -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",

View File

@@ -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)