using Content.Server.Explosion.EntitySystems;
-using Content.Server.GameTicking.Rules.Components;
using Content.Server.Mind;
using Content.Server.Objectives.Components;
using Content.Server.Popups;
using Content.Server.Roles;
-using Content.Shared.Interaction;
using Content.Shared.Ninja.Components;
using Content.Shared.Ninja.Systems;
+using Content.Shared.Roles;
using Content.Shared.Sticky;
-using Robust.Shared.GameObjects;
namespace Content.Server.Ninja.Systems;
{
[Dependency] private readonly MindSystem _mind = default!;
[Dependency] private readonly PopupSystem _popup = default!;
+ [Dependency] private readonly SharedRoleSystem _role = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly SpaceNinjaSystem _ninja = default!;
var user = args.User;
- if (!_mind.TryGetRole<NinjaRoleComponent>(user, out var _))
+ if (!_mind.TryGetMind(args.User, out var mind, out _))
+ return;
+
+ if (!_role.MindHasRole<NinjaRoleComponent>(mind))
{
_popup.PopupEntity(Loc.GetString("spider-charge-not-ninja"), user, user);
args.Cancelled = true;
return false;
}
- /// <summary>
- /// Gets a role component from a player's mind.
- /// </summary>
- /// <returns>Whether a role was found</returns>
- public bool TryGetRole<T>(EntityUid user, [NotNullWhen(true)] out T? role) where T : IComponent
- {
- role = default;
- if (!TryComp<MindContainerComponent>(user, out var mindContainer) || mindContainer.Mind == null)
- return false;
-
- return TryComp(mindContainer.Mind, out role);
- }
-
/// <summary>
/// Sets the Mind's UserId, Session, and updates the player's PlayerData. This should have no direct effect on the
/// entity that any mind is connected to, except as a side effect of the fact that it may change a player's