OneMoreRoundWeapon.BotControl.cs
using Sandbox;

/// <summary>
/// Narrow programmatic control surface for host-controlled OMR bots.
///
/// This intentionally routes AI through the real BaseCombatWeapon/OMR weapon
/// mechanics rather than duplicating damage, ammo, reload, ADS, cooldown or
/// cycle behavior inside the bot brain.
/// </summary>
public partial class OneMoreRoundWeapon
{
	/// <summary>
	/// Applies an AI ADS intent while respecting the same authored capability,
	/// round-rule, reload, sprint and cycle gates used by a human weapon.
	/// </summary>
	public bool SetBotAimIntent( bool wantsAim )
	{
		if ( !IsBotControlled )
			return false;

		bool resolvedAim =
			wantsAim &&
			AllowAim &&
			RoundAllowsAim &&
			!_sprintSuppressesAim &&
			!IsReloading &&
			CanAimDuringCurrentCycle();

		if ( resolvedAim != IsAiming )
			SetAiming( resolvedAim );

		EnsureViewModelAimState();
		return IsAiming;
	}

	/// <summary>
	/// Pulls the real primary trigger from AI. FirePrimary() owns fire-rate and
	/// readiness checks; PrimaryAttack is never called directly.
	/// </summary>
	public bool BotTryPrimaryFire()
	{
		if ( !IsBotControlled )
			return false;

		UpdateTemporaryPrimaryGate();
		return FirePrimary();
	}

	/// <summary>
	/// Starts the real weapon reload when legal. Reload remains host-authoritative
	/// and all normal magazine/reserve/presentation behavior is preserved.
	/// </summary>
	public bool BotTryReload()
	{
		if ( !IsBotControlled || !CanReload() )
			return false;

		Reload();
		return true;
	}
}