This commit is contained in:
Gray
2024-03-08 18:16:32 -05:00
parent 99477f15e0
commit be2fc81942
9 changed files with 43 additions and 38 deletions

View File

@@ -15,3 +15,9 @@ void AController::Possess(class APawn* Pawn)
auto PossessFn = FindFunction("Possess"); auto PossessFn = FindFunction("Possess");
this->ProcessEvent(PossessFn, &Pawn); this->ProcessEvent(PossessFn, &Pawn);
} }
void AController::UnPossess()
{
auto UnPossessFn = FindFunction("UnPossess");
this->ProcessEvent(UnPossessFn);
}

View File

@@ -7,6 +7,7 @@ class AController : public AActor
public: public:
AActor* GetViewTarget(); AActor* GetViewTarget();
void Possess(class APawn* Pawn); void Possess(class APawn* Pawn);
void UnPossess();
FName& GetStateName() FName& GetStateName()
{ {

View File

@@ -27,6 +27,8 @@ UFortWeaponItemDefinition* AFortAthenaVehicle::GetVehicleWeaponForSeat(int SeatI
static auto WeaponSeatDefinitionsOffset = WeaponComponent->GetOffset("WeaponSeatDefinitions"); static auto WeaponSeatDefinitionsOffset = WeaponComponent->GetOffset("WeaponSeatDefinitions");
auto& WeaponSeatDefinitions = WeaponComponent->Get<TArray<__int64>>(WeaponSeatDefinitionsOffset); auto& WeaponSeatDefinitions = WeaponComponent->Get<TArray<__int64>>(WeaponSeatDefinitionsOffset);
// VehicleWeaponDefinition = *(UFortWeaponItemDefinition**)(__int64(WeaponSeatDefinitions.at(SeatIdx)) + VehicleWeaponOffset);
for (int i = 0; i < WeaponSeatDefinitions.Num(); i++) for (int i = 0; i < WeaponSeatDefinitions.Num(); i++)
{ {
auto WeaponSeat = WeaponSeatDefinitions.AtPtr(i, WeaponSeatDefinitionStructSize); auto WeaponSeat = WeaponSeatDefinitions.AtPtr(i, WeaponSeatDefinitionStructSize);

View File

@@ -65,6 +65,8 @@ static UFortPlaylistAthena* GetPlaylistToUse()
if (Globals::bCreative) if (Globals::bCreative)
Playlist = FindObject<UFortPlaylistAthena>(L"/Game/Athena/Playlists/Creative/Playlist_PlaygroundV2.Playlist_PlaygroundV2"); Playlist = FindObject<UFortPlaylistAthena>(L"/Game/Athena/Playlists/Creative/Playlist_PlaygroundV2.Playlist_PlaygroundV2");
// Playlist = FindObject<UFortPlaylistAthena>(L"/Game/Athena/Playlists/Respawn/Variants/Respawn_Vamp/Playlist_Respawn_Vamp_Solo.Playlist_Respawn_Vamp_Solo");
return Playlist; return Playlist;
} }

View File

@@ -499,54 +499,30 @@ void AFortPlayerController::ServerAttemptInteractHook(UObject* Context, FFrame*
if (!WorldInventory) if (!WorldInventory)
return; return;
auto NewAndModifiedInstances = WorldInventory->AddItem(VehicleWeaponDefinition, nullptr); auto NewAndModifiedInstances = WorldInventory->AddItem(VehicleWeaponDefinition, nullptr, 1, 9999);
auto NewVehicleInstance = NewAndModifiedInstances.first[0]; auto NewVehicleInstance = NewAndModifiedInstances.first[0];
if (!NewVehicleInstance) if (!NewVehicleInstance)
return; return;
WorldInventory->Update(); static auto FortItemEntrySize = FFortItemEntry::GetStructSize();
auto VehicleWeapon = Pawn->EquipWeaponDefinition(VehicleWeaponDefinition, NewVehicleInstance->GetItemEntry()->GetItemGuid()); auto& ReplicatedEntries = WorldInventory->GetItemList().GetReplicatedEntries();
// PlayerController->ServerExecuteInventoryItemHook(PlayerController, newitem->GetItemEntry()->GetItemGuid());
/* static auto GetSeatWeaponComponentFn = FindObject<UFunction>("/Script/FortniteGame.FortAthenaVehicle.GetSeatWeaponComponent"); for (int i = 0; i < ReplicatedEntries.Num(); i++)
if (GetSeatWeaponComponentFn)
{ {
struct { int SeatIndex; UObject* ReturnValue; } AFortAthenaVehicle_GetSeatWeaponComponent_Params{}; auto ReplicatedEntry = ReplicatedEntries.AtPtr(i, FortItemEntrySize);
Vehicle->ProcessEvent(GetSeatWeaponComponentFn, &AFortAthenaVehicle_GetSeatWeaponComponent_Params); if (ReplicatedEntry->GetItemGuid() == NewVehicleInstance->GetItemEntry()->GetItemGuid())
UObject* WeaponComponent = AFortAthenaVehicle_GetSeatWeaponComponent_Params.ReturnValue;
if (!WeaponComponent)
return;
static auto WeaponSeatDefinitionStructSize = FindObject<UClass>("/Script/FortniteGame.WeaponSeatDefinition")->GetPropertiesSize();
static auto VehicleWeaponOffset = FindOffsetStruct("/Script/FortniteGame.WeaponSeatDefinition", "VehicleWeapon");
static auto SeatIndexOffset = FindOffsetStruct("/Script/FortniteGame.WeaponSeatDefinition", "SeatIndex");
static auto WeaponSeatDefinitionsOffset = WeaponComponent->GetOffset("WeaponSeatDefinitions");
auto& WeaponSeatDefinitions = WeaponComponent->Get<TArray<__int64>>(WeaponSeatDefinitionsOffset);
for (int i = 0; i < WeaponSeatDefinitions.Num(); ++i)
{ {
auto WeaponSeat = WeaponSeatDefinitions.AtPtr(i, WeaponSeatDefinitionStructSize); WorldInventory->GetItemList().MarkItemDirty(ReplicatedEntry);
WorldInventory->GetItemList().MarkItemDirty(NewVehicleInstance->GetItemEntry());
WorldInventory->HandleInventoryLocalUpdate();
if (*(int*)(__int64(WeaponSeat) + SeatIndexOffset) != Vehicle->FindSeatIndex(Pawn)) PlayerController->ServerExecuteInventoryItemHook(PlayerController, NewVehicleInstance->GetItemEntry()->GetItemGuid());
continue; }
auto VehicleGrantedWeaponItem = (TWeakObjectPtr<UFortItem>*)(__int64(WeaponSeat) + 0x20);
VehicleGrantedWeaponItem->ObjectIndex = NewVehicleInstance->InternalIndex;
VehicleGrantedWeaponItem->ObjectSerialNumber = GetItemByIndex(NewVehicleInstance->InternalIndex)->SerialNumber;
static auto bWeaponEquippedOffset = WeaponComponent->GetOffset("bWeaponEquipped");
WeaponComponent->Get<bool>(bWeaponEquippedOffset) = true;
break;
} }
} */
return; return;
} }
@@ -776,7 +752,7 @@ void AFortPlayerController::ServerAttemptAircraftJumpHook(AFortPlayerController*
{ {
if (false) if (false)
{ {
// honestly idk why this doesnt work // honestly idk why this doesnt work ( ithink its suppsoed to be spectator)
auto NAME_Inactive = UKismetStringLibrary::Conv_StringToName(L"NAME_Inactive"); auto NAME_Inactive = UKismetStringLibrary::Conv_StringToName(L"NAME_Inactive");

View File

@@ -334,6 +334,13 @@ void AFortPlayerControllerAthena::ServerRestartPlayerHook(AFortPlayerControllerA
static auto ZoneServerRestartPlayer = __int64(FortPlayerControllerZoneDefault->VFTable[GetFunctionIdxOrPtr(ServerRestartPlayerFn) / 8]); static auto ZoneServerRestartPlayer = __int64(FortPlayerControllerZoneDefault->VFTable[GetFunctionIdxOrPtr(ServerRestartPlayerFn) / 8]);
static void (*ZoneServerRestartPlayerOriginal)(AFortPlayerController*) = decltype(ZoneServerRestartPlayerOriginal)(__int64(ZoneServerRestartPlayer)); static void (*ZoneServerRestartPlayerOriginal)(AFortPlayerController*) = decltype(ZoneServerRestartPlayerOriginal)(__int64(ZoneServerRestartPlayer));
// auto NAME_Spectating = UKismetStringLibrary::Conv_StringToName(L"NAME_Spectating");
// LOG_INFO(LogDev, "ISplayerwaiting: {}", Controller->IsPlayerWaiting());
// Controller->GetStateName() = NAME_Spectating;
// Controller->SetPlayerIsWaiting(true);
LOG_INFO(LogDev, "ServerRestartPlayerHook Call 0x{:x} returning with 0x{:x}!", ZoneServerRestartPlayer - __int64(_ReturnAddress()), __int64(ZoneServerRestartPlayerOriginal) - __int64(GetModuleHandleW(0))); LOG_INFO(LogDev, "ServerRestartPlayerHook Call 0x{:x} returning with 0x{:x}!", ZoneServerRestartPlayer - __int64(_ReturnAddress()), __int64(ZoneServerRestartPlayerOriginal) - __int64(GetModuleHandleW(0)));
return ZoneServerRestartPlayerOriginal(Controller); return ZoneServerRestartPlayerOriginal(Controller);
} }

View File

@@ -16,6 +16,13 @@ void APlayerController::SetPlayerIsWaiting(bool NewValue)
this->SetBitfieldValue(bPlayerIsWaitingOffset, bPlayerIsWaitingFieldMask, NewValue); this->SetBitfieldValue(bPlayerIsWaitingOffset, bPlayerIsWaitingFieldMask, NewValue);
} }
bool APlayerController::IsPlayerWaiting()
{
static auto bPlayerIsWaitingOffset = GetOffset("bPlayerIsWaiting");
static auto bPlayerIsWaitingFieldMask = GetFieldMask(this->GetProperty("bPlayerIsWaiting"));
return this->ReadBitfieldValue(bPlayerIsWaitingOffset, bPlayerIsWaitingFieldMask);
}
UCheatManager*& APlayerController::SpawnCheatManager(UClass* CheatManagerClass) UCheatManager*& APlayerController::SpawnCheatManager(UClass* CheatManagerClass)
{ {
GetCheatManager() = UGameplayStatics::SpawnObject<UCheatManager>(CheatManagerClass, this, true); GetCheatManager() = UGameplayStatics::SpawnObject<UCheatManager>(CheatManagerClass, this, true);

View File

@@ -23,6 +23,7 @@ public:
} }
void SetPlayerIsWaiting(bool NewValue); void SetPlayerIsWaiting(bool NewValue);
bool IsPlayerWaiting();
void ServerChangeName(FString& S); void ServerChangeName(FString& S);
UCheatManager*& SpawnCheatManager(UClass* CheatManagerClass); UCheatManager*& SpawnCheatManager(UClass* CheatManagerClass);
FRotator GetControlRotation(); FRotator GetControlRotation();

View File

@@ -79,6 +79,7 @@ static ENetMode GetNetModeHook2() { return NetMode; }
static bool ReturnTrueHook() { return true; } static bool ReturnTrueHook() { return true; }
static bool ReturnFalseHook() { return false; } static bool ReturnFalseHook() { return false; }
static int Return2Hook() { return 2; } static int Return2Hook() { return 2; }
static void EmptyHook() { return; }
static bool NoMCPHook() { return Globals::bNoMCP; } static bool NoMCPHook() { return Globals::bNoMCP; }
static void CollectGarbageHook() { return; } static void CollectGarbageHook() { return; }
@@ -305,7 +306,7 @@ void ActivatePhaseAtIndexHook(UObject* SpecialEventScript, int Index)
auto WorldInventory = CurrentController->GetWorldInventory(); auto WorldInventory = CurrentController->GetWorldInventory();
bool bShouldUpdate = false; bool bShouldUpdate = false;
WorldInventory->AddItem(WID, &bShouldUpdate, 1); WorldInventory->AddItem(WID, &bShouldUpdate, 1, 9999);
if (bShouldUpdate) if (bShouldUpdate)
WorldInventory->Update(); WorldInventory->Update();
@@ -808,6 +809,8 @@ DWORD WINAPI Main(LPVOID)
if (Fortnite_Version == 17.30) // Rift Tour stuff if (Fortnite_Version == 17.30) // Rift Tour stuff
{ {
auto busCrash = Hooking::MinHook::Hook(Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 6C 24 ? 56 57 41 54 41 56 41 57 48 83 EC 40 48 8B 59 28 45 33 E4").GetAs<PVOID>(), (PVOID)EmptyHook);
Hooking::MinHook::Hook((PVOID)(__int64(GetModuleHandleW(0)) + 0x3E07910), (PVOID)GetMeshNetworkNodeTypeHook, nullptr); Hooking::MinHook::Hook((PVOID)(__int64(GetModuleHandleW(0)) + 0x3E07910), (PVOID)GetMeshNetworkNodeTypeHook, nullptr);
Hooking::MinHook::Hook((PVOID)(__int64(GetModuleHandleW(0)) + 0x3DED158), (PVOID)ReturnTrueHook, nullptr); // 7FF7E556D158 Hooking::MinHook::Hook((PVOID)(__int64(GetModuleHandleW(0)) + 0x3DED158), (PVOID)ReturnTrueHook, nullptr); // 7FF7E556D158
Hooking::MinHook::Hook((PVOID)(__int64(GetModuleHandleW(0)) + 0x3DECFC8), (PVOID)ReturnTrueHook, nullptr); // 7FF7E556CFC8 Hooking::MinHook::Hook((PVOID)(__int64(GetModuleHandleW(0)) + 0x3DECFC8), (PVOID)ReturnTrueHook, nullptr); // 7FF7E556CFC8