using Content.Server.Chat.Systems; using Content.Shared.Chat; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Interaction; using Content.Shared.Popups; using Content.Shared.Silicons.Bots; using Robust.Shared.Audio.Systems; namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Specific; public sealed partial class MedibotInjectOperator : HTNOperator { [Dependency] private readonly IEntityManager _entMan = default!; private ChatSystem _chat = default!; private MedibotSystem _medibot = default!; private SharedAudioSystem _audio = default!; private SharedInteractionSystem _interaction = default!; private SharedPopupSystem _popup = default!; private SharedSolutionContainerSystem _solutionContainer = default!; /// /// Target entity to inject. /// [DataField("targetKey", required: true)] public string TargetKey = string.Empty; public override void Initialize(IEntitySystemManager sysManager) { base.Initialize(sysManager); _chat = sysManager.GetEntitySystem(); _medibot = sysManager.GetEntitySystem(); _audio = sysManager.GetEntitySystem(); _interaction = sysManager.GetEntitySystem(); _popup = sysManager.GetEntitySystem(); _solutionContainer = sysManager.GetEntitySystem(); } public override void TaskShutdown(NPCBlackboard blackboard, HTNOperatorStatus status) { base.TaskShutdown(blackboard, status); blackboard.Remove(TargetKey); } public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime) { // TODO: Wat var owner = blackboard.GetValue(NPCBlackboard.Owner); if (!blackboard.TryGetValue(TargetKey, out var target, _entMan) || _entMan.Deleted(target)) return HTNOperatorStatus.Failed; if (!_entMan.TryGetComponent(owner, out var botComp)) return HTNOperatorStatus.Failed; if (!_medibot.CheckInjectable((owner, botComp), target) || !_medibot.TryInject((owner, botComp), target)) return HTNOperatorStatus.Failed; _chat.TrySendInGameICMessage(owner, Loc.GetString("medibot-finish-inject"), InGameICChatType.Speak, hideChat: true, hideLog: true); return HTNOperatorStatus.Finished; } }