int32 ASWeapon::GiveAmmo(int32 AddAmount) { const int32 MissingAmmo = FMath::Max(0, MaxAmmo - CurrentAmmo); AddAmount = FMath::Min(AddAmount, MissingAmmo); CurrentAmmo += AddAmount; /* Push reload request to client */ if (GetCurrentAmmoInClip() <= 0 && CanReload() && MyPawn->GetCurrentWeapon() == this) { ClientStartReload(); } /* Return the unused ammo when weapon is filled up */ return FMath::Max(0, AddAmount - MissingAmmo); }
void AShooterWeapon::GiveAmmo(int AddAmount) { const int32 MissingAmmo = FMath::Max(0, WeaponConfig.MaxAmmo - CurrentAmmo); AddAmount = FMath::Min(AddAmount, MissingAmmo); CurrentAmmo += AddAmount; AShooterAIController* BotAI = MyPawn ? Cast<AShooterAIController>(MyPawn->GetController()) : NULL; if (BotAI) { BotAI->CheckAmmo(this); } // start reload if clip was empty if (GetCurrentAmmoInClip() <= 0 && CanReload() && MyPawn->GetWeapon() == this) { ClientStartReload(); } }