diff --git a/Project Reboot 3.0/FortGameModeAthena.cpp b/Project Reboot 3.0/FortGameModeAthena.cpp index 7182e0d..e5ae583 100644 --- a/Project Reboot 3.0/FortGameModeAthena.cpp +++ b/Project Reboot 3.0/FortGameModeAthena.cpp @@ -179,11 +179,9 @@ bool AFortGameModeAthena::Athena_ReadyToStartMatchHook(AFortGameModeAthena* Game static int LastNum2 = 1; - // LOG_INFO(LogDev, "ReadyToStartMatch AmountOfRestarts: {} LastNum2: {}!", AmountOfRestarts, LastNum2); - - if (AmountOfRestarts != LastNum2) + if (Globals::AmountOfListens != LastNum2) { - LastNum2 = AmountOfRestarts; + LastNum2 = Globals::AmountOfListens; LOG_INFO(LogDev, "Presetup!"); @@ -418,9 +416,9 @@ bool AFortGameModeAthena::Athena_ReadyToStartMatchHook(AFortGameModeAthena* Game static int LastNum6 = 1; - if (AmountOfRestarts != LastNum6) + if (Globals::AmountOfListens != LastNum6) { - LastNum6 = AmountOfRestarts; + LastNum6 = Globals::AmountOfListens; if (Globals::bGoingToPlayEvent && DoesEventRequireLoading()) { @@ -434,9 +432,9 @@ bool AFortGameModeAthena::Athena_ReadyToStartMatchHook(AFortGameModeAthena* Game static int LastNum5 = 1; - if (AmountOfRestarts != LastNum5 && LastNum6 == AmountOfRestarts) + if (Globals::AmountOfListens != LastNum5 && LastNum6 == Globals::AmountOfListens) // Make sure we loaded the event. { - LastNum5 = AmountOfRestarts; + LastNum5 = Globals::AmountOfListens; if (Globals::bGoingToPlayEvent) { @@ -463,9 +461,9 @@ bool AFortGameModeAthena::Athena_ReadyToStartMatchHook(AFortGameModeAthena* Game static int LastNum9 = 1; - if (AmountOfRestarts != LastNum9) + if (Globals::AmountOfListens != LastNum9) { - LastNum9 = AmountOfRestarts; + LastNum9 = Globals::AmountOfListens; } static auto MapInfoOffset = GameState->GetOffset("MapInfo"); @@ -480,9 +478,9 @@ bool AFortGameModeAthena::Athena_ReadyToStartMatchHook(AFortGameModeAthena* Game static int LastNum = 1; - if (AmountOfRestarts != LastNum) + if (Globals::AmountOfListens != LastNum) { - LastNum = AmountOfRestarts; + LastNum = Globals::AmountOfListens; float Duration = 10000.f; float EarlyDuration = Duration; @@ -544,9 +542,9 @@ bool AFortGameModeAthena::Athena_ReadyToStartMatchHook(AFortGameModeAthena* Game static int LastNum3 = 1; - if (AmountOfRestarts != LastNum3) + if (Globals::AmountOfListens != LastNum3) { - LastNum3 = AmountOfRestarts; + LastNum3 = ++Globals::AmountOfListens; LOG_INFO(LogNet, "Attempting to listen!"); @@ -574,7 +572,6 @@ bool AFortGameModeAthena::Athena_ReadyToStartMatchHook(AFortGameModeAthena* Game LoopMutators([&](AFortAthenaMutator* Mutator) { LOG_INFO(LogGame, "Mutator {}", Mutator->GetPathName()); }); - Globals::AmountOfListens++; Globals::bStartedListening = true; } @@ -692,9 +689,9 @@ int AFortGameModeAthena::Athena_PickTeamHook(AFortGameModeAthena* GameMode, uint static int LastNum = 1; - if (AmountOfRestarts != LastNum) + if (Globals::AmountOfListens != LastNum) { - LastNum = AmountOfRestarts; + LastNum = Globals::AmountOfListens; Current = DefaultFirstTeam; CurrentTeamMembers = 0; @@ -793,9 +790,9 @@ void AFortGameModeAthena::Athena_HandleStartingNewPlayerHook(AFortGameModeAthena { static int LastNum69 = 19451; - if (LastNum69 != AmountOfRestarts) + if (LastNum69 != Globals::AmountOfListens) { - LastNum69 = AmountOfRestarts; + LastNum69 = Globals::AmountOfListens; bool bShouldDestroyVendingMachines = Fortnite_Version < 3.4 || Engine_Version >= 424; // This is not how it works, we need to add the spawn percentage. @@ -914,9 +911,9 @@ void AFortGameModeAthena::Athena_HandleStartingNewPlayerHook(AFortGameModeAthena { static int LastNum420 = 1; - if (AmountOfRestarts != LastNum420) + if (Globals::AmountOfListens != LastNum420) { - LastNum420 = AmountOfRestarts; + LastNum420 = Globals::AmountOfListens; SpawnVehicles2(); } diff --git a/Project Reboot 3.0/FortLootPackage.cpp b/Project Reboot 3.0/FortLootPackage.cpp index 7de1353..2fb6523 100644 --- a/Project Reboot 3.0/FortLootPackage.cpp +++ b/Project Reboot 3.0/FortLootPackage.cpp @@ -92,16 +92,15 @@ std::vector PickLootDrops(FName TierGroupName, bool bPrint, int recurs static std::vector LTDTables; static std::vector LPTables; - static auto DataTableClass = FindObject("/Script/Engine.DataTable"); - static auto CompositeDataTableClass = FindObject("/Script/Engine.CompositeDataTable"); + static auto CompositeDataTableClass = FindObject(L"/Script/Engine.CompositeDataTable"); static int LastNum1 = 14915; auto CurrentPlaylist = CurrentPlaylistDataOffset == -1 && Fortnite_Version < 6 ? nullptr : GameState->GetCurrentPlaylist(); - if (LastNum1 != AmountOfRestarts) + if (LastNum1 != Globals::AmountOfListens) { - LastNum1 = AmountOfRestarts; + LastNum1 = Globals::AmountOfListens; LTDTables.clear(); LPTables.clear(); @@ -123,8 +122,8 @@ std::vector PickLootDrops(FName TierGroupName, bool bPrint, int recurs auto LootTierDataTableIsComposite = LootTierDataStr.contains("Composite"); auto LootPackageTableIsComposite = LootPackagesStr.contains("Composite"); - auto StrongLootTierData = LootTierDataSoft.Get(LootTierDataTableIsComposite ? CompositeDataTableClass : DataTableClass, true); - auto StrongLootPackage = LootPackagesSoft.Get(LootPackageTableIsComposite ? CompositeDataTableClass : DataTableClass, true); + auto StrongLootTierData = LootTierDataSoft.Get(LootTierDataTableIsComposite ? CompositeDataTableClass : UDataTable::StaticClass(), true); + auto StrongLootPackage = LootPackagesSoft.Get(LootPackageTableIsComposite ? CompositeDataTableClass : UDataTable::StaticClass(), true); if (StrongLootTierData && StrongLootPackage) { @@ -171,8 +170,8 @@ std::vector PickLootDrops(FName TierGroupName, bool bPrint, int recurs auto LootPackageTableStr = DefaultLootTableData->LootPackageData.SoftObjectPtr.ObjectID.AssetPathName.ToString(); auto LootPackageTableIsComposite = LootPackageTableStr.contains("Composite"); - auto LootTierDataPtr = DefaultLootTableData->LootTierData.Get(LootTierDataTableIsComposite ? CompositeDataTableClass : DataTableClass, true); - auto LootPackagePtr = DefaultLootTableData->LootPackageData.Get(LootPackageTableIsComposite ? CompositeDataTableClass : DataTableClass, true); + auto LootTierDataPtr = DefaultLootTableData->LootTierData.Get(LootTierDataTableIsComposite ? CompositeDataTableClass : UDataTable::StaticClass(), true); + auto LootPackagePtr = DefaultLootTableData->LootPackageData.Get(LootPackageTableIsComposite ? CompositeDataTableClass : UDataTable::StaticClass(), true); if (LootPackagePtr) { @@ -200,7 +199,7 @@ std::vector PickLootDrops(FName TierGroupName, bool bPrint, int recurs auto OverrideLootPackageTableStr = Value.Second.LootPackageData.SoftObjectPtr.ObjectID.AssetPathName.ToString(); auto bOverrideIsComposite = OverrideLootPackageTableStr.contains("Composite"); - auto ptr = Value.Second.LootPackageData.Get(bOverrideIsComposite ? CompositeDataTableClass : DataTableClass, true); + auto ptr = Value.Second.LootPackageData.Get(bOverrideIsComposite ? CompositeDataTableClass : UDataTable::StaticClass(), true); if (ptr) { @@ -254,7 +253,7 @@ std::vector PickLootDrops(FName TierGroupName, bool bPrint, int recurs auto OverrideLootTierDataStr = Value.Second.LootTierData.SoftObjectPtr.ObjectID.AssetPathName.ToString(); auto bOverrideIsComposite = OverrideLootTierDataStr.contains("Composite"); - auto ptr = Value.Second.LootTierData.Get(bOverrideIsComposite ? CompositeDataTableClass : DataTableClass, true); + auto ptr = Value.Second.LootTierData.Get(bOverrideIsComposite ? CompositeDataTableClass : UDataTable::StaticClass(), true); if (ptr) { @@ -335,8 +334,8 @@ std::vector PickLootDrops(FName TierGroupName, bool bPrint, int recurs auto LootTierDataTableIsComposite = LootTierDataStr.contains("Composite"); auto LootPackageTableIsComposite = LootPackagesStr.contains("Composite"); - auto StrongLootTierData = LootTierDataSoft.Get(LootTierDataTableIsComposite ? CompositeDataTableClass : DataTableClass, true); - auto StrongLootPackage = LootPackagesSoft.Get(LootPackageTableIsComposite ? CompositeDataTableClass : DataTableClass, true); + auto StrongLootTierData = LootTierDataSoft.Get(LootTierDataTableIsComposite ? CompositeDataTableClass : UDataTable::StaticClass(), true); + auto StrongLootPackage = LootPackagesSoft.Get(LootPackageTableIsComposite ? CompositeDataTableClass : UDataTable::StaticClass(), true); if (StrongLootTierData && StrongLootPackage) { diff --git a/Project Reboot 3.0/FortPlayerController.cpp b/Project Reboot 3.0/FortPlayerController.cpp index d941cc7..695fadc 100644 --- a/Project Reboot 3.0/FortPlayerController.cpp +++ b/Project Reboot 3.0/FortPlayerController.cpp @@ -270,13 +270,13 @@ void AFortPlayerController::ServerExecuteInventoryItemHook(AFortPlayerController // LOG_INFO(LogDev, "Equipping ItemDefinition: {}", ItemDefinition->GetFullName()); - static auto FortGadgetItemDefinitionClass = FindObject("/Script/FortniteGame.FortGadgetItemDefinition"); + static auto FortGadgetItemDefinitionClass = FindObject(L"/Script/FortniteGame.FortGadgetItemDefinition"); UFortGadgetItemDefinition* GadgetItemDefinition = Cast(ItemDefinition); if (GadgetItemDefinition) { - static auto GetWeaponItemDefinition = FindObject("/Script/FortniteGame.FortGadgetItemDefinition.GetWeaponItemDefinition"); + static auto GetWeaponItemDefinition = FindObject(L"/Script/FortniteGame.FortGadgetItemDefinition.GetWeaponItemDefinition"); if (GetWeaponItemDefinition) { @@ -284,7 +284,7 @@ void AFortPlayerController::ServerExecuteInventoryItemHook(AFortPlayerController } else { - static auto GetDecoItemDefinition = FindObject("/Script/FortniteGame.FortGadgetItemDefinition.GetDecoItemDefinition"); + static auto GetDecoItemDefinition = FindObject(L"/Script/FortniteGame.FortGadgetItemDefinition.GetDecoItemDefinition"); ItemDefinition->ProcessEvent(GetDecoItemDefinition, &ItemDefinition); } @@ -296,7 +296,7 @@ void AFortPlayerController::ServerExecuteInventoryItemHook(AFortPlayerController Pawn->PickUpActor(nullptr, DecoItemDefinition); // todo check ret value? // I checked on 1.7.2 and it only returns true if the new weapon is a FortDecoTool Pawn->GetCurrentWeapon()->GetItemEntryGuid() = ItemGuid; - static auto FortDecoTool_ContextTrapStaticClass = FindObject("/Script/FortniteGame.FortDecoTool_ContextTrap"); + static auto FortDecoTool_ContextTrapStaticClass = FindObject(L"/Script/FortniteGame.FortDecoTool_ContextTrap"); if (Pawn->GetCurrentWeapon()->IsA(FortDecoTool_ContextTrapStaticClass)) { @@ -314,7 +314,7 @@ void AFortPlayerController::ServerExecuteInventoryItemHook(AFortPlayerController { if (Engine_Version < 420) { - static auto FortWeap_BuildingToolClass = FindObject("/Script/FortniteGame.FortWeap_BuildingTool"); + static auto FortWeap_BuildingToolClass = FindObject(L"/Script/FortniteGame.FortWeap_BuildingTool"); if (!Weapon->IsA(FortWeap_BuildingToolClass)) return; @@ -324,35 +324,35 @@ void AFortPlayerController::ServerExecuteInventoryItemHook(AFortPlayerController using UBuildingEditModeMetadata = UObject; using UFortBuildingItemDefinition = UObject; - static auto OnRep_DefaultMetadataFn = FindObject("/Script/FortniteGame.FortWeap_BuildingTool.OnRep_DefaultMetadata"); + static auto OnRep_DefaultMetadataFn = FindObject(L"/Script/FortniteGame.FortWeap_BuildingTool.OnRep_DefaultMetadata"); static auto DefaultMetadataOffset = BuildingTool->GetOffset("DefaultMetadata"); - static auto RoofPiece = FindObject("/Game/Items/Weapons/BuildingTools/BuildingItemData_RoofS.BuildingItemData_RoofS"); - static auto FloorPiece = FindObject("/Game/Items/Weapons/BuildingTools/BuildingItemData_Floor.BuildingItemData_Floor"); - static auto WallPiece = FindObject("/Game/Items/Weapons/BuildingTools/BuildingItemData_Wall.BuildingItemData_Wall"); - static auto StairPiece = FindObject("/Game/Items/Weapons/BuildingTools/BuildingItemData_Stair_W.BuildingItemData_Stair_W"); + static auto RoofPiece = FindObject(L"/Game/Items/Weapons/BuildingTools/BuildingItemData_RoofS.BuildingItemData_RoofS"); + static auto FloorPiece = FindObject(L"/Game/Items/Weapons/BuildingTools/BuildingItemData_Floor.BuildingItemData_Floor"); + static auto WallPiece = FindObject(L"/Game/Items/Weapons/BuildingTools/BuildingItemData_Wall.BuildingItemData_Wall"); + static auto StairPiece = FindObject(L"/Game/Items/Weapons/BuildingTools/BuildingItemData_Stair_W.BuildingItemData_Stair_W"); UBuildingEditModeMetadata* OldMetadata = nullptr; // Newer versions OldMetadata = BuildingTool->Get(DefaultMetadataOffset); if (ItemDefinition == RoofPiece) { - static auto RoofMetadata = FindObject("/Game/Building/EditModePatterns/Roof/EMP_Roof_RoofC.EMP_Roof_RoofC"); + static auto RoofMetadata = FindObject(L"/Game/Building/EditModePatterns/Roof/EMP_Roof_RoofC.EMP_Roof_RoofC"); BuildingTool->Get(DefaultMetadataOffset) = RoofMetadata; } else if (ItemDefinition == StairPiece) { - static auto StairMetadata = FindObject("/Game/Building/EditModePatterns/Stair/EMP_Stair_StairW.EMP_Stair_StairW"); + static auto StairMetadata = FindObject(L"/Game/Building/EditModePatterns/Stair/EMP_Stair_StairW.EMP_Stair_StairW"); BuildingTool->Get(DefaultMetadataOffset) = StairMetadata; } else if (ItemDefinition == WallPiece) { - static auto WallMetadata = FindObject("/Game/Building/EditModePatterns/Wall/EMP_Wall_Solid.EMP_Wall_Solid"); + static auto WallMetadata = FindObject(L"/Game/Building/EditModePatterns/Wall/EMP_Wall_Solid.EMP_Wall_Solid"); BuildingTool->Get(DefaultMetadataOffset) = WallMetadata; } else if (ItemDefinition == FloorPiece) { - static auto FloorMetadata = FindObject("/Game/Building/EditModePatterns/Floor/EMP_Floor_Floor.EMP_Floor_Floor"); + static auto FloorMetadata = FindObject(L"/Game/Building/EditModePatterns/Floor/EMP_Floor_Floor.EMP_Floor_Floor"); BuildingTool->Get(DefaultMetadataOffset) = FloorMetadata; } @@ -363,15 +363,15 @@ void AFortPlayerController::ServerExecuteInventoryItemHook(AFortPlayerController void AFortPlayerController::ServerAttemptInteractHook(UObject* Context, FFrame* Stack, void* Ret) { - // static auto LlamaClass = FindObject("/Game/Athena/SupplyDrops/Llama/AthenaSupplyDrop_Llama.AthenaSupplyDrop_Llama_C"); - static auto FortAthenaSupplyDropClass = FindObject("/Script/FortniteGame.FortAthenaSupplyDrop"); - static auto BuildingItemCollectorActorClass = FindObject("/Script/FortniteGame.BuildingItemCollectorActor"); + // static auto LlamaClass = FindObject(L"/Game/Athena/SupplyDrops/Llama/AthenaSupplyDrop_Llama.AthenaSupplyDrop_Llama_C"); + static auto FortAthenaSupplyDropClass = FindObject(L"/Script/FortniteGame.FortAthenaSupplyDrop"); + static auto BuildingItemCollectorActorClass = FindObject(L"/Script/FortniteGame.BuildingItemCollectorActor"); LOG_INFO(LogInteraction, "ServerAttemptInteract!"); auto Params = Stack->Locals; - static bool bIsUsingComponent = FindObject("/Script/FortniteGame.FortControllerComponent_Interaction"); + static bool bIsUsingComponent = FindObject(L"/Script/FortniteGame.FortControllerComponent_Interaction"); AFortPlayerControllerAthena* PlayerController = bIsUsingComponent ? Cast(((UActorComponent*)Context)->GetOwner()) : Cast(Context); @@ -393,7 +393,7 @@ void AFortPlayerController::ServerAttemptInteractHook(UObject* Context, FFrame* FVector LocationToSpawnLoot = ReceivingActor->GetActorLocation() + ReceivingActor->GetActorRightVector() * 70.f + FVector{ 0, 0, 50 }; - static auto FortAthenaVehicleClass = FindObject("/Script/FortniteGame.FortAthenaVehicle"); + static auto FortAthenaVehicleClass = FindObject(L"/Script/FortniteGame.FortAthenaVehicle"); static auto SearchAnimationCountOffset = FindOffsetStruct("/Script/FortniteGame.FortSearchBounceData", "SearchAnimationCount"); if (auto BuildingContainer = Cast(ReceivingActor)) @@ -412,7 +412,7 @@ void AFortPlayerController::ServerAttemptInteractHook(UObject* Context, FFrame* BuildingContainer->SetBitfieldValue(bAlreadySearchedOffset, bAlreadySearchedFieldMask, true); (*(int*)(__int64(SearchBounceData) + SearchAnimationCountOffset))++; - static auto OnRep_bAlreadySearchedFn = FindObject("/Script/FortniteGame.BuildingContainer.OnRep_bAlreadySearched"); + static auto OnRep_bAlreadySearchedFn = FindObject(L"/Script/FortniteGame.BuildingContainer.OnRep_bAlreadySearched"); BuildingContainer->ProcessEvent(OnRep_bAlreadySearchedFn); static auto SearchLootTierGroupOffset = BuildingContainer->GetOffset("SearchLootTierGroup"); @@ -506,8 +506,8 @@ void AFortPlayerController::ServerAttemptInteractHook(UObject* Context, FFrame* // this is a weird way of getting the current item collection we are on. - static auto StoneItemData = FindObject("/Game/Items/ResourcePickups/StoneItemData.StoneItemData"); - static auto MetalItemData = FindObject("/Game/Items/ResourcePickups/MetalItemData.MetalItemData"); + static auto StoneItemData = FindObject(L"/Game/Items/ResourcePickups/StoneItemData.StoneItemData"); + static auto MetalItemData = FindObject(L"/Game/Items/ResourcePickups/MetalItemData.MetalItemData"); if (CurrentMaterial == StoneItemData) Index = 1; @@ -556,7 +556,7 @@ void AFortPlayerController::ServerAttemptInteractHook(UObject* Context, FFrame* ItemCollector->SetBitfieldValue(bCurrentInteractionSuccessOffset, bCurrentInteractionSuccessFieldMask, true); // idek if this is needed } - static auto DoVendDeath = FindObject("/Game/Athena/Items/Gameplay/VendingMachine/B_Athena_VendingMachine.B_Athena_VendingMachine_C.DoVendDeath"); + static auto DoVendDeath = FindObject(L"/Game/Athena/Items/Gameplay/VendingMachine/B_Athena_VendingMachine.B_Athena_VendingMachine_C.DoVendDeath"); if (DoVendDeath) { @@ -602,7 +602,7 @@ void AFortPlayerController::ServerAttemptAircraftJumpHook(AFortPlayerController* if (Fortnite_Version >= 18) { - static auto StormEffectClass = FindObject("/Game/Athena/SafeZone/GE_OutsideSafeZoneDamage.GE_OutsideSafeZoneDamage_C"); + static auto StormEffectClass = FindObject(L"/Game/Athena/SafeZone/GE_OutsideSafeZoneDamage.GE_OutsideSafeZoneDamage_C"); auto PlayerState = PlayerController->GetPlayerStateAthena(); PlayerState->GetAbilitySystemComponent()->RemoveActiveGameplayEffectBySourceEffect(StormEffectClass, 1, PlayerState->GetAbilitySystemComponent()); } @@ -634,20 +634,20 @@ void AFortPlayerController::ServerAttemptAircraftJumpHook(AFortPlayerController* } } - static auto WoodItemData = FindObject("/Game/Items/ResourcePickups/WoodItemData.WoodItemData"); - static auto StoneItemData = FindObject("/Game/Items/ResourcePickups/StoneItemData.StoneItemData"); - static auto MetalItemData = FindObject("/Game/Items/ResourcePickups/MetalItemData.MetalItemData"); + static auto WoodItemData = FindObject(L"/Game/Items/ResourcePickups/WoodItemData.WoodItemData"); + static auto StoneItemData = FindObject(L"/Game/Items/ResourcePickups/StoneItemData.StoneItemData"); + static auto MetalItemData = FindObject(L"/Game/Items/ResourcePickups/MetalItemData.MetalItemData"); - static auto Rifle = FindObject("/Game/Athena/Items/Weapons/WID_Assault_AutoHigh_Athena_SR_Ore_T03.WID_Assault_AutoHigh_Athena_SR_Ore_T03"); - static auto Shotgun = FindObject("/Game/Athena/Items/Weapons/WID_Shotgun_Standard_Athena_SR_Ore_T03.WID_Shotgun_Standard_Athena_SR_Ore_T03"); - static auto SMG = FindObject("/Game/Athena/Items/Weapons/WID_Pistol_AutoHeavyPDW_Athena_R_Ore_T03.WID_Pistol_AutoHeavyPDW_Athena_R_Ore_T03"); + static auto Rifle = FindObject(L"/Game/Athena/Items/Weapons/WID_Assault_AutoHigh_Athena_SR_Ore_T03.WID_Assault_AutoHigh_Athena_SR_Ore_T03"); + static auto Shotgun = FindObject(L"/Game/Athena/Items/Weapons/WID_Shotgun_Standard_Athena_SR_Ore_T03.WID_Shotgun_Standard_Athena_SR_Ore_T03"); + static auto SMG = FindObject(L"/Game/Athena/Items/Weapons/WID_Pistol_AutoHeavyPDW_Athena_R_Ore_T03.WID_Pistol_AutoHeavyPDW_Athena_R_Ore_T03"); - static auto MiniShields = FindObject("/Game/Athena/Items/Consumables/ShieldSmall/Athena_ShieldSmall.Athena_ShieldSmall"); + static auto MiniShields = FindObject(L"/Game/Athena/Items/Consumables/ShieldSmall/Athena_ShieldSmall.Athena_ShieldSmall"); - static auto Shells = FindObject("/Game/Athena/Items/Ammo/AthenaAmmoDataShells.AthenaAmmoDataShells"); - static auto Medium = FindObject("/Game/Athena/Items/Ammo/AthenaAmmoDataBulletsMedium.AthenaAmmoDataBulletsMedium"); - static auto Light = FindObject("/Game/Athena/Items/Ammo/AthenaAmmoDataBulletsLight.AthenaAmmoDataBulletsLight"); - static auto Heavy = FindObject("/Game/Athena/Items/Ammo/AthenaAmmoDataBulletsHeavy.AthenaAmmoDataBulletsHeavy"); + static auto Shells = FindObject(L"/Game/Athena/Items/Ammo/AthenaAmmoDataShells.AthenaAmmoDataShells"); + static auto Medium = FindObject(L"/Game/Athena/Items/Ammo/AthenaAmmoDataBulletsMedium.AthenaAmmoDataBulletsMedium"); + static auto Light = FindObject(L"/Game/Athena/Items/Ammo/AthenaAmmoDataBulletsLight.AthenaAmmoDataBulletsLight"); + static auto Heavy = FindObject(L"/Game/Athena/Items/Ammo/AthenaAmmoDataBulletsHeavy.AthenaAmmoDataBulletsHeavy"); auto WorldInventory = PlayerController->GetWorldInventory(); @@ -937,12 +937,12 @@ void AFortPlayerController::ServerPlayEmoteItemHook(AFortPlayerController* Playe UObject* AbilityToUse = nullptr; - static auto AthenaSprayItemDefinitionClass = FindObject("/Script/FortniteGame.AthenaSprayItemDefinition"); - static auto AthenaToyItemDefinitionClass = FindObject("/Script/FortniteGame.AthenaToyItemDefinition"); + static auto AthenaSprayItemDefinitionClass = FindObject(L"/Script/FortniteGame.AthenaSprayItemDefinition"); + static auto AthenaToyItemDefinitionClass = FindObject(L"/Script/FortniteGame.AthenaToyItemDefinition"); if (EmoteAsset->IsA(AthenaSprayItemDefinitionClass)) { - static auto SprayGameplayAbilityDefault = FindObject("/Game/Abilities/Sprays/GAB_Spray_Generic.Default__GAB_Spray_Generic_C"); + static auto SprayGameplayAbilityDefault = FindObject(L"/Game/Abilities/Sprays/GAB_Spray_Generic.Default__GAB_Spray_Generic_C"); AbilityToUse = SprayGameplayAbilityDefault; } @@ -951,7 +951,7 @@ void AFortPlayerController::ServerPlayEmoteItemHook(AFortPlayerController* Playe static auto ToySpawnAbilityOffset = EmoteAsset->GetOffset("ToySpawnAbility"); auto& ToySpawnAbilitySoft = EmoteAsset->Get>(ToySpawnAbilityOffset); - static auto BGAClass = FindObject("/Script/Engine.BlueprintGeneratedClass"); + static auto BGAClass = FindObject(L"/Script/Engine.BlueprintGeneratedClass"); auto ToySpawnAbility = ToySpawnAbilitySoft.Get(BGAClass, true); @@ -963,14 +963,14 @@ void AFortPlayerController::ServerPlayEmoteItemHook(AFortPlayerController* Playe if (!AbilityToUse) { - static auto EmoteGameplayAbilityDefault = FindObject("/Game/Abilities/Emotes/GAB_Emote_Generic.Default__GAB_Emote_Generic_C"); + static auto EmoteGameplayAbilityDefault = FindObject(L"/Game/Abilities/Emotes/GAB_Emote_Generic.Default__GAB_Emote_Generic_C"); AbilityToUse = EmoteGameplayAbilityDefault; } if (!AbilityToUse) return; - static auto AthenaDanceItemDefinitionClass = FindObject("/Script/FortniteGame.AthenaDanceItemDefinition"); + static auto AthenaDanceItemDefinitionClass = FindObject(L"/Script/FortniteGame.AthenaDanceItemDefinition"); if (EmoteAsset->IsA(AthenaDanceItemDefinitionClass)) { @@ -1020,7 +1020,7 @@ void AFortPlayerController::ServerPlayEmoteItemHook(AFortPlayerController* Playe uint8 ToDeathCause(const FGameplayTagContainer& TagContainer, bool bWasDBNO = false, AFortPawn* Pawn = nullptr) { - static auto ToDeathCauseFn = FindObject("/Script/FortniteGame.FortPlayerStateAthena.ToDeathCause"); + static auto ToDeathCauseFn = FindObject(L"/Script/FortniteGame.FortPlayerStateAthena.ToDeathCause"); if (ToDeathCauseFn) { @@ -1086,7 +1086,10 @@ DWORD WINAPI SpectateThread(LPVOID) { // auto PC = PlayerControllersDead.at(i).load(); - static auto SpectateOnDeathFn = FindObject("/Script/FortniteGame.FortPlayerControllerZone.SpectateOnDeath") ? FindObject("/Script/FortniteGame.FortPlayerControllerZone.SpectateOnDeath") : FindObject("/Script/FortniteGame.FortPlayerControllerAthena.SpectateOnDeath"); + static auto SpectateOnDeathFn = FindObject(L"/Script/FortniteGame.FortPlayerControllerZone.SpectateOnDeath") ? + FindObject(L"/Script/FortniteGame.FortPlayerControllerZone.SpectateOnDeath") : + FindObject(L"/Script/FortniteGame.FortPlayerControllerAthena.SpectateOnDeath"); + PC->ProcessEvent(SpectateOnDeathFn); } @@ -1107,7 +1110,7 @@ void AFortPlayerController::ClientOnPawnDiedHook(AFortPlayerController* PlayerCo if (!DeadPawn || !GameState || !DeadPlayerState) return ClientOnPawnDiedOriginal(PlayerController, DeathReport); - static auto DeathInfoStruct = FindObject("/Script/FortniteGame.DeathInfo"); + static auto DeathInfoStruct = FindObject(L"/Script/FortniteGame.DeathInfo"); static auto DeathInfoStructSize = DeathInfoStruct->GetPropertiesSize(); auto DeathLocation = DeadPawn->GetActorLocation(); @@ -1154,7 +1157,7 @@ void AFortPlayerController::ClientOnPawnDiedHook(AFortPlayerController* PlayerCo if (MemberOffsets::FortPlayerState::PawnDeathLocation != -1) DeadPlayerState->Get(MemberOffsets::FortPlayerState::PawnDeathLocation) = DeathLocation; - static auto OnRep_DeathInfoFn = FindObject("/Script/FortniteGame.FortPlayerStateAthena.OnRep_DeathInfo"); + static auto OnRep_DeathInfoFn = FindObject(L"/Script/FortniteGame.FortPlayerStateAthena.OnRep_DeathInfo"); if (OnRep_DeathInfoFn) { @@ -1242,7 +1245,7 @@ void AFortPlayerController::ClientOnPawnDiedHook(AFortPlayerController* PlayerCo AActor* DamageCauser = *(AActor**)(__int64(DeathReport) + MemberOffsets::DeathReport::DamageCauser); UFortWeaponItemDefinition* KillerWeaponDef = nullptr; - static auto FortProjectileBaseClass = FindObject("/Script/FortniteGame.FortProjectileBase"); + static auto FortProjectileBaseClass = FindObject(L"/Script/FortniteGame.FortProjectileBase"); LOG_INFO(LogDev, "FortProjectileBaseClass: {}", __int64(FortProjectileBaseClass)); if (DamageCauser) @@ -1327,7 +1330,7 @@ void AFortPlayerController::ServerBeginEditingBuildingActorHook(AFortPlayerContr if (!WorldInventory) return; - static auto EditToolDef = FindObject("/Game/Items/Weapons/BuildingTools/EditTool.EditTool"); + static auto EditToolDef = FindObject(L"/Game/Items/Weapons/BuildingTools/EditTool.EditTool"); auto EditToolInstance = WorldInventory->FindItemInstance(EditToolDef); @@ -1402,7 +1405,7 @@ void AFortPlayerController::ServerEndEditingBuildingActorHook(AFortPlayerControl BuildingActorToStopEditing->SetEditingPlayer(nullptr); - static auto EditToolDef = FindObject("/Game/Items/Weapons/BuildingTools/EditTool.EditTool"); + static auto EditToolDef = FindObject(L"/Game/Items/Weapons/BuildingTools/EditTool.EditTool"); auto WorldInventory = PlayerController->GetWorldInventory(); diff --git a/Project Reboot 3.0/NetConnection.cpp b/Project Reboot 3.0/NetConnection.cpp index 0b8ba3f..a633b5d 100644 --- a/Project Reboot 3.0/NetConnection.cpp +++ b/Project Reboot 3.0/NetConnection.cpp @@ -1,7 +1,7 @@ #include "NetConnection.h" bool UNetConnection::ClientHasInitializedLevelFor(const AActor* TestActor) const { - return true; + // return true; static auto ClientHasInitializedLevelForAddr = Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 48 8B 5A 20 48 8B F1 4C 8B C3").Get(); if (!ClientHasInitializedLevelForAddr) diff --git a/Project Reboot 3.0/World.cpp b/Project Reboot 3.0/World.cpp index f6a5f66..e707413 100644 --- a/Project Reboot 3.0/World.cpp +++ b/Project Reboot 3.0/World.cpp @@ -21,7 +21,7 @@ void UWorld::Listen() constexpr bool bUseBeacons = true; - int Port = 7777 - AmountOfRestarts; + int Port = 7777 - Globals::AmountOfListens + 1; if (bUseBeacons) { @@ -79,7 +79,7 @@ void UWorld::Listen() *(UNetDriver**)(__int64(LevelCollections.AtPtr(0, LevelCollectionSize)) + 0x10) = NewNetDriver; *(UNetDriver**)(__int64(LevelCollections.AtPtr(1, LevelCollectionSize)) + 0x10) = NewNetDriver; - LOG_INFO(LogNet, "Listening on port {}!", Port + AmountOfRestarts); + LOG_INFO(LogNet, "Listening on port {}!", Port + Globals::AmountOfListens - 1); } AWorldSettings* UWorld::GetWorldSettings(const bool bCheckStreamingPersistent, const bool bChecked) const diff --git a/Project Reboot 3.0/addresses.cpp b/Project Reboot 3.0/addresses.cpp index 8303f28..c0b6491 100644 --- a/Project Reboot 3.0/addresses.cpp +++ b/Project Reboot 3.0/addresses.cpp @@ -518,7 +518,7 @@ std::vector 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()); } - if (Fortnite_Version == 16.50) + if (std::floor(Fortnite_Version) == 16) { 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 } diff --git a/Project Reboot 3.0/dllmain.cpp b/Project Reboot 3.0/dllmain.cpp index c6872ae..792433d 100644 --- a/Project Reboot 3.0/dllmain.cpp +++ b/Project Reboot 3.0/dllmain.cpp @@ -98,13 +98,16 @@ void __fastcall ApplyHomebaseEffectsOnPlayerSetupHook( char a6, unsigned __int8 a7) { + if (!Hero) + return ApplyHomebaseEffectsOnPlayerSetupOriginal(GameState, a2, a3, a4, Hero, a6, a7); + LOG_INFO(LogDev, "Old hero: {}", Hero ? Hero->GetFullName() : "InvalidObject"); - UFortItemDefinition* HeroType = FindObject("/Game/Athena/Heroes/HID_030_Athena_Commando_M_Halloween.HID_030_Athena_Commando_M_Halloween"); + UFortItemDefinition* HeroType = FindObject(L"/Game/Athena/Heroes/HID_030_Athena_Commando_M_Halloween.HID_030_Athena_Commando_M_Halloween"); - if (Fortnite_Version == 1.72) + if (Fortnite_Version == 1.72 || Fortnite_Version == 1.8) { - auto AllHeroTypes = GetAllObjectsOfClass(FindObject("/Script/FortniteGame.FortHeroType")); + auto AllHeroTypes = GetAllObjectsOfClass(FindObject(L"/Script/FortniteGame.FortHeroType")); std::vector AthenaHeroTypes; for (int i = 0; i < AllHeroTypes.size(); i++) @@ -214,11 +217,11 @@ DWORD WINAPI Main(LPVOID) bool bUseRemovePlayer = false; bool bUseSwitchLevel = false; - Hooking::MinHook::Hook(FindObject("/Script/FortniteGame.Default__BuildingFoundation"), + Hooking::MinHook::Hook(FindObject(L"/Script/FortniteGame.Default__BuildingFoundation"), FindObject(L"/Script/FortniteGame.BuildingFoundation.SetDynamicFoundationTransform"), ABuildingFoundation::SetDynamicFoundationTransformHook, (PVOID*)&ABuildingFoundation::SetDynamicFoundationTransformOriginal, false, true); - Hooking::MinHook::Hook(FindObject("/Script/FortniteGame.Default__BuildingFoundation"), + Hooking::MinHook::Hook(FindObject(L"/Script/FortniteGame.Default__BuildingFoundation"), FindObject(L"/Script/FortniteGame.BuildingFoundation.SetDynamicFoundationEnabled"), ABuildingFoundation::SetDynamicFoundationEnabledHook, (PVOID*)&ABuildingFoundation::SetDynamicFoundationEnabledOriginal, false, true); @@ -302,7 +305,7 @@ DWORD WINAPI Main(LPVOID) auto AddressesToNull = Addresses::GetFunctionsToNull(); - auto ServerCheatAllIndex = GetFunctionIdxOrPtr(FindObject("/Script/FortniteGame.FortPlayerController.ServerCheatAll")); + auto ServerCheatAllIndex = GetFunctionIdxOrPtr(FindObject(L"/Script/FortniteGame.FortPlayerController.ServerCheatAll")); if (ServerCheatAllIndex) AddressesToNull.push_back(__int64(FortPlayerControllerAthenaDefault->VFTable[ServerCheatAllIndex / 8])); @@ -391,7 +394,7 @@ DWORD WINAPI Main(LPVOID) Hooking::MinHook::Hook(GameModeDefault, FindObject(L"/Script/Engine.GameModeBase.HandleStartingNewPlayer"), AFortGameModeAthena::Athena_HandleStartingNewPlayerHook, (PVOID*)&AFortGameModeAthena::Athena_HandleStartingNewPlayerOriginal, false); - static auto ControllerServerAttemptInteractFn = FindObject("/Script/FortniteGame.FortPlayerController.ServerAttemptInteract"); + static auto ControllerServerAttemptInteractFn = FindObject(L"/Script/FortniteGame.FortPlayerController.ServerAttemptInteract"); if (ControllerServerAttemptInteractFn) { @@ -400,8 +403,8 @@ DWORD WINAPI Main(LPVOID) } else { - Hooking::MinHook::Hook(FindObject("/Script/FortniteGame.Default__FortControllerComponent_Interaction"), - FindObject("/Script/FortniteGame.FortControllerComponent_Interaction.ServerAttemptInteract"), + Hooking::MinHook::Hook(FindObject(L"/Script/FortniteGame.Default__FortControllerComponent_Interaction"), + FindObject(L"/Script/FortniteGame.FortControllerComponent_Interaction.ServerAttemptInteract"), AFortPlayerController::ServerAttemptInteractHook, (PVOID*)&AFortPlayerController::ServerAttemptInteractOriginal, false, true); } @@ -503,18 +506,18 @@ DWORD WINAPI Main(LPVOID) if (false && FortOctopusVehicleDefault) // hooking broken on 19.10 i cant figure it out for the life of me { - static auto ServerUpdateTowhookFn = FindObject("/Script/FortniteGame.FortOctopusVehicle.ServerUpdateTowhook"); + static auto ServerUpdateTowhookFn = FindObject(L"/Script/FortniteGame.FortOctopusVehicle.ServerUpdateTowhook"); Hooking::MinHook::Hook(FortOctopusVehicleDefault, ServerUpdateTowhookFn, AFortOctopusVehicle::ServerUpdateTowhookHook, nullptr, false); } Hooking::MinHook::Hook(FindObject(L"/Script/FortniteGame.Default__FortWeaponRangedMountedCannon"), - FindObject("/Script/FortniteGame.FortWeaponRangedMountedCannon.ServerFireActorInCannon"), AFortWeaponRangedMountedCannon::ServerFireActorInCannonHook, nullptr, false); + FindObject(L"/Script/FortniteGame.FortWeaponRangedMountedCannon.ServerFireActorInCannon"), AFortWeaponRangedMountedCannon::ServerFireActorInCannonHook, nullptr, false); static auto NetMulticast_Athena_BatchedDamageCuesFn = FindObject(L"/Script/FortniteGame.FortPawn.NetMulticast_Athena_BatchedDamageCues") ? FindObject(L"/Script/FortniteGame.FortPawn.NetMulticast_Athena_BatchedDamageCues") : FindObject(L"/Script/FortniteGame.FortPlayerPawnAthena.NetMulticast_Athena_BatchedDamageCues"); Hooking::MinHook::Hook(FortPlayerPawnAthenaDefault, FindObject(L"/Script/FortniteGame.FortPlayerPawn.ServerSendZiplineState"), AFortPlayerPawn::ServerSendZiplineStateHook, nullptr, false); - Hooking::MinHook::Hook((PVOID)GetFunctionIdxOrPtr(FindObject("/Script/FortniteGame.FortPlayerPawn.ServerOnExitVehicle"), true), AFortPlayerPawn::ServerOnExitVehicleHook, (PVOID*)&AFortPlayerPawn::ServerOnExitVehicleOriginal); + Hooking::MinHook::Hook((PVOID)GetFunctionIdxOrPtr(FindObject(L"/Script/FortniteGame.FortPlayerPawn.ServerOnExitVehicle"), true), AFortPlayerPawn::ServerOnExitVehicleHook, (PVOID*)&AFortPlayerPawn::ServerOnExitVehicleOriginal); bool bNativeHookRemoveFortItemFromPlayer = false; diff --git a/Project Reboot 3.0/finder.h b/Project Reboot 3.0/finder.h index b74037c..13734ca 100644 --- a/Project Reboot 3.0/finder.h +++ b/Project Reboot 3.0/finder.h @@ -654,7 +654,7 @@ static inline uint64 FindSetZoneToIndex() // actually StartNewSafeZonePhase if (Engine_Version == 422) return Memcury::Scanner::FindPattern("E9 ? ? ? ? 48 8B C1 40 38 B9").RelativeOffset(1).Get(); // 7.40 - auto Addr = Memcury::Scanner::FindStringRef(L"FortGameModeAthena: No MegaStorm on SafeZone[%d]. GridCellThickness is less than 1.0.", true, 0, Fortnite_Version >= 16.50).Get(); + auto Addr = Memcury::Scanner::FindStringRef(L"FortGameModeAthena: No MegaStorm on SafeZone[%d]. GridCellThickness is less than 1.0.", true, 0, Fortnite_Version >= 16).Get(); // return FindBytes(Addr, { 0x40, 0x55 }, 30000, 0, true); if (!Addr) @@ -1307,10 +1307,13 @@ static inline uint64 FindApplyCharacterCustomization() return Addrr - 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) + if (Fortnite_Version >= 15) // hm? { - return Addrr - 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) { @@ -1375,7 +1378,7 @@ static inline uint64 FindPickTeam() static inline uint64 FindInternalTryActivateAbility() { - auto Addrr = Memcury::Scanner::FindStringRef(L"InternalTryActivateAbility called with invalid Handle! ASC: %s. AvatarActor: %s", true, 0, Fortnite_Version >= 16.50).Get(); + auto Addrr = Memcury::Scanner::FindStringRef(L"InternalTryActivateAbility called with invalid Handle! ASC: %s. AvatarActor: %s", true, 0, Fortnite_Version >= 16).Get(); // checked 16.40 for (int i = 0; i < 1000; i++) {