mirror of
https://github.com/Milxnor/Project-Reboot-3.0.git
synced 2026-01-13 02:42:22 +01:00
interact + pickuo
This commit is contained in:
@@ -11,7 +11,7 @@ UFortItem* CreateItemInstance(AFortPlayerController* PlayerController, UFortItem
|
||||
return NewItemInstance;
|
||||
}
|
||||
|
||||
std::pair<std::vector<UFortItem*>, std::vector<UFortItem*>> AFortInventory::AddItem(UFortItemDefinition* ItemDefinition, bool* bShouldUpdate, int Count)
|
||||
std::pair<std::vector<UFortItem*>, std::vector<UFortItem*>> AFortInventory::AddItem(UFortItemDefinition* ItemDefinition, bool* bShouldUpdate, int Count, int LoadedAmmo, bool bShouldAddToStateValues)
|
||||
{
|
||||
if (bShouldUpdate)
|
||||
*bShouldUpdate = false;
|
||||
@@ -45,6 +45,95 @@ std::pair<std::vector<UFortItem*>, std::vector<UFortItem*>> AFortInventory::AddI
|
||||
return std::make_pair(NewItemInstances, ModifiedItemInstances);
|
||||
}
|
||||
|
||||
bool AFortInventory::RemoveItem(const FGuid& ItemGuid, bool* bShouldUpdate, int Count)
|
||||
{
|
||||
if (bShouldUpdate)
|
||||
*bShouldUpdate = false;
|
||||
|
||||
auto ItemInstance = FindItemInstance(ItemGuid);
|
||||
auto ReplicatedEntry = FindReplicatedEntry(ItemGuid);
|
||||
|
||||
if (!ItemInstance || !ReplicatedEntry)
|
||||
return false;
|
||||
|
||||
auto ItemDefinition = Cast<UFortWorldItemDefinition>(ReplicatedEntry->GetItemDefinition());
|
||||
|
||||
if (!ItemDefinition)
|
||||
return false;
|
||||
|
||||
auto NewCount = ReplicatedEntry->GetCount() - Count;
|
||||
|
||||
if (NewCount > 0)
|
||||
{
|
||||
ItemInstance->GetItemEntry()->GetCount() = NewCount;
|
||||
ReplicatedEntry->GetCount() = NewCount;
|
||||
|
||||
GetItemList().MarkItemDirty(ItemInstance->GetItemEntry());
|
||||
GetItemList().MarkItemDirty(ReplicatedEntry);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static auto FortItemEntryStruct = FindObject(L"/Script/FortniteGame.FortItemEntry");
|
||||
static auto FortItemEntrySize = *(int*)(__int64(FortItemEntryStruct) + Offsets::PropertiesSize);
|
||||
|
||||
auto& ItemInstances = GetItemList().GetItemInstances();
|
||||
auto& ReplicatedEntries = GetItemList().GetReplicatedEntries();
|
||||
|
||||
for (int i = 0; i < ItemInstances.Num(); i++)
|
||||
{
|
||||
if (ItemInstances.at(i)->GetItemEntry()->GetItemGuid() == ItemGuid)
|
||||
{
|
||||
ItemInstances.Remove(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < ReplicatedEntries.Num(); i++)
|
||||
{
|
||||
if (ReplicatedEntries.at(i).GetItemGuid() == ItemGuid)
|
||||
{
|
||||
ReplicatedEntries.Remove(i, FortItemEntrySize);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// todo remove from weaponlist
|
||||
|
||||
if (bShouldUpdate)
|
||||
*bShouldUpdate = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void AFortInventory::ModifyCount(UFortItem* ItemInstance, int New, bool bRemove, std::pair<FFortItemEntry*, FFortItemEntry*>* outEntries, bool bUpdate)
|
||||
{
|
||||
auto ReplicatedEntry = FindReplicatedEntry(ItemInstance->GetItemEntry()->GetItemGuid());
|
||||
|
||||
if (!ReplicatedEntry)
|
||||
return;
|
||||
|
||||
if (!bRemove)
|
||||
{
|
||||
ItemInstance->GetItemEntry()->GetCount() += New;
|
||||
ReplicatedEntry->GetCount() += New;
|
||||
}
|
||||
else
|
||||
{
|
||||
ItemInstance->GetItemEntry()->GetCount() -= New;
|
||||
ReplicatedEntry->GetCount() -= New;
|
||||
}
|
||||
|
||||
if (outEntries)
|
||||
*outEntries = { ItemInstance->GetItemEntry(), ReplicatedEntry};
|
||||
|
||||
if (bUpdate || !outEntries)
|
||||
{
|
||||
GetItemList().MarkItemDirty(ItemInstance->GetItemEntry());
|
||||
GetItemList().MarkItemDirty(ReplicatedEntry);
|
||||
}
|
||||
}
|
||||
|
||||
UFortItem* AFortInventory::FindItemInstance(const FGuid& Guid)
|
||||
{
|
||||
auto& ItemInstances = GetItemList().GetItemInstances();
|
||||
@@ -57,5 +146,20 @@ UFortItem* AFortInventory::FindItemInstance(const FGuid& Guid)
|
||||
return ItemInstance;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
FFortItemEntry* AFortInventory::FindReplicatedEntry(const FGuid& Guid)
|
||||
{
|
||||
auto& ReplicatedEntries = GetItemList().GetReplicatedEntries();
|
||||
|
||||
for (int i = 0; i < ReplicatedEntries.Num(); i++)
|
||||
{
|
||||
auto& ReplicatedEntry = ReplicatedEntries.At(i);
|
||||
|
||||
if (ReplicatedEntry.GetItemGuid() == Guid)
|
||||
return &ReplicatedEntry;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
Reference in New Issue
Block a user