mirror of
https://github.com/Milxnor/Project-Reboot-3.0.git
synced 2026-01-13 02:42:22 +01:00
a lot
change how abilities work ("more" proper), readded vehicle spawning to s8-s12, fixed respawning on >s4, added a count check to looting so it can't drop 0 count, added zipline jumping, guarantee pawn spawn, clear inventory on aircraft
This commit is contained in:
58
Project Reboot 3.0/FortPlayerStateAthena.cpp
Normal file
58
Project Reboot 3.0/FortPlayerStateAthena.cpp
Normal file
@@ -0,0 +1,58 @@
|
||||
#include "FortPlayerStateAthena.h"
|
||||
#include "Stack.h"
|
||||
#include "FortPlayerControllerAthena.h"
|
||||
|
||||
void AFortPlayerStateAthena::ServerSetInAircraftHook(UObject* Context, FFrame& Stack, void* Ret)
|
||||
{
|
||||
auto PlayerState = (AFortPlayerStateAthena*)Context;
|
||||
auto PlayerController = Cast<AFortPlayerControllerAthena>(PlayerState->GetOwner());
|
||||
|
||||
if (!PlayerController)
|
||||
return;
|
||||
|
||||
// std::cout << "bNewInAircraft: " << bNewInAircraft << '\n';
|
||||
// std::cout << "PlayerController->IsInAircraft(): " << PlayerController->IsInAircraft() << '\n';
|
||||
|
||||
struct aaa { bool wtf; };
|
||||
|
||||
auto bNewInAircraft = ((aaa*)Stack.Locals)->wtf;// *(bool*)Stack.Locals;
|
||||
auto WorldInventory = PlayerController->GetWorldInventory();
|
||||
auto& InventoryList = WorldInventory->GetItemList();
|
||||
|
||||
auto& ItemInstances = InventoryList.GetItemInstances();
|
||||
|
||||
if ((/* (bNewInAircraft && !PlayerController->IsInAircraft()) || */ (Globals::bLateGame ? bNewInAircraft : true)) && ItemInstances.Num())
|
||||
{
|
||||
// std::cout << "InventoryList.ItemInstances.Num(): " << InventoryList.ItemInstances.Num() << '\n';
|
||||
|
||||
std::vector<std::pair<FGuid, int>> GuidAndCountsToRemove;
|
||||
|
||||
for (int i = 0; i < ItemInstances.Num(); i++)
|
||||
{
|
||||
auto ItemEntry = ItemInstances.at(i)->GetItemEntry();
|
||||
auto ItemDefinition = Cast<UFortWorldItemDefinition>(ItemEntry->GetItemDefinition());
|
||||
|
||||
if (!ItemDefinition)
|
||||
continue;
|
||||
|
||||
if (!ItemDefinition->CanBeDropped())
|
||||
continue;
|
||||
|
||||
GuidAndCountsToRemove.push_back({ ItemEntry->GetItemGuid(), ItemEntry->GetCount() });
|
||||
}
|
||||
|
||||
for (auto& Pair : GuidAndCountsToRemove)
|
||||
{
|
||||
WorldInventory->RemoveItem(Pair.first, nullptr, Pair.second);
|
||||
}
|
||||
|
||||
WorldInventory->Update();
|
||||
|
||||
static auto CurrentShieldOffset = PlayerState->GetOffset("CurrentShield");
|
||||
|
||||
if (CurrentShieldOffset != -1)
|
||||
PlayerState->Get<float>(CurrentShieldOffset) = 0; // real
|
||||
}
|
||||
|
||||
return ServerSetInAircraftOriginal(Context, Stack, Ret);
|
||||
}
|
||||
Reference in New Issue
Block a user