NetworkBot.cs
using Sandbox;
namespace PaintballBaddies;
/// <summary>Replicate decisions for presentation; only the host runs the AI.</summary>
public sealed class NetworkBot : Component
{
[Property,Sync(SyncFlags.FromHost)] public int Seat { get; set; }
[Sync(SyncFlags.FromHost)] public Vector3 Velocity { get; set; }
[Sync(SyncFlags.FromHost)] public Vector3 Aim { get; set; }
[Sync(SyncFlags.FromHost)] public bool Covered { get; set; }
[Sync(SyncFlags.FromHost)] public bool Peek { get; set; }
[Sync(SyncFlags.FromHost)] public bool Low { get; set; }
[Sync(SyncFlags.FromHost)] public string ContactState { get; set; }="";
private float update;
protected override void OnUpdate()
{
var bot=Components.Get<ArenaOpponent>();if(!bot.IsValid())return;
if(MultiplayerSession.Authority)
{
update-=Time.Delta;if(update>0)return;update=.05f;
Velocity=bot.NavigationVelocity;Aim=bot.CombatAimPoint;
Covered=bot.UsingCover;Peek=bot.CoverPeeking;Low=bot.CoverIsLow;
ContactState=Components.Get<CloseCombat>()?.CaptureNetworkState() ?? "";
}
else {bot.ApplyNetwork(this);Components.Get<CloseCombat>()?.ApplyNetworkState(ContactState);}
}
}