void ASWeaponPickup::OnUsed(APawn* InstigatorPawn) { ASCharacter* MyPawn = Cast<ASCharacter>(InstigatorPawn); if (MyPawn) { /* Fetch the default variables of the class we are about to pick up and check if the storage slot is available on the pawn. */ if (MyPawn->WeaponSlotAvailable(WeaponClass->GetDefaultObject<ASWeapon>()->GetStorageSlot())) { FActorSpawnParameters SpawnInfo; SpawnInfo.bNoCollisionFail = true; ASWeapon* NewWeapon = GetWorld()->SpawnActor<ASWeapon>(WeaponClass, SpawnInfo); MyPawn->AddWeapon(NewWeapon); Super::OnUsed(InstigatorPawn); } else { ASPlayerController* PC = Cast<ASPlayerController>(MyPawn->GetController()); if (PC) { PC->ClientMessageReceived("Weapon slot already taken."); } } } }
void ASGameMode::SpawnDefaultInventory(APawn* PlayerPawn) { ASCharacter* MyPawn = Cast<ASCharacter>(PlayerPawn); if (MyPawn) { for (int32 i = 0; i < DefaultInventoryClasses.Num(); i++) { if (DefaultInventoryClasses[i]) { FActorSpawnParameters SpawnInfo; SpawnInfo.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; ASWeapon* NewWeapon = GetWorld()->SpawnActor<ASWeapon>(DefaultInventoryClasses[i], SpawnInfo); MyPawn->AddWeapon(NewWeapon); } } } }