Hello and Thank You.
I have an class
Backpack.h
public:
UFUNCTION(Reliable, Server, WithValidation)
void AddItem(AItem* item);
virtual void AddItem_Implementation(AItem* item);
virtual bool AddItem_Validate(AItem* item);
Backpack.cpp
void ABackpack::AddItem_Implementation(AItem *item)
{
UE_LOG(YourLog, Warning, TEXT("[AddItem]server item %s"), *item->Name);
}
Attach Backpack to Character
void ANetworkTestCharacter::EquipOnSlot_Implementation(AItem* bp, FName slot)
{
LocalEquipOnSlot(bp, slot);
if(Role == ROLE_Authority) {
UE_LOG(YourLog, Warning, TEXT("[EquipOnSlot]Slot is %s"), *slot.ToString());
EquipOnSlot_RPC(bp, slot);
}
}
void ANetworkTestCharacter::LocalEquipOnSlot(AItem* item, FName slot) {
UE_LOG(YourLog, Warning, TEXT("[LocalEquipOnSlot]Slot is %s"), *slot.ToString());
ABackpack* bp = Cast<ABackpack>(item);
if (bp != NULL) {
USkeletalMeshComponent* sm = bp->FindComponentByClass<USkeletalMeshComponent>();
if(sm != NULL) {
sm->SetSimulatePhysics(false);
sm->SetCollisionEnabled(ECollisionEnabled::NoCollision);
}
bp->AttachRootComponentTo(GetMesh(), slot, EAttachLocation::SnapToTarget);
bp->SetOwner(this);
equiped.Add(Cast<IEquipable>(item));
}
}
Problem part:
ABackpack* backpack = Cast<ABackpack>(*Itr);
if(backpack != NULL) {
backpack->AddItem(item); // Doesn't call on Server
}