using CounterStrikeSharp.API.Core; using GroupVerifyApi; namespace CS2_Tags; // zio: GroupVerify's API (shared/GroupVerifyApi). Kept in its own class, and only created inside a // try in OnAllPluginsLoaded, so CS2-Tags still loads, and tags as before, when GroupVerify isn't // installed and its assembly can't be found. internal sealed class VerifyLink : IDisposable { private readonly IGroupVerifyApi _api; private readonly Action _playerChanged; private readonly Action _tagChanged; private VerifyLink(IGroupVerifyApi api, Action playerChanged, Action tagChanged) { _api = api; _playerChanged = playerChanged; _tagChanged = tagChanged; _api.OnVerifiedChanged += OnVerifiedChanged; _api.OnClanTagChanged += _tagChanged; } // The API, or null when GroupVerify isn't loaded. public static VerifyLink? TryCreate(Action playerChanged, Action tagChanged) { IGroupVerifyApi? api; try { api = IGroupVerifyApi.Capability.Get(); } catch (KeyNotFoundException) { return null; } return api == null ? null : new VerifyLink(api, playerChanged, tagChanged); } // The tag verified players without a rank get, "" while none is set or GroupVerify is off. public string ClanTag => _api.ClanTag; public bool IsVerified(CCSPlayerController player) => _api.IsVerified(player); private void OnVerifiedChanged(CCSPlayerController player, VerifyStatus status) => _playerChanged(player); public void Dispose() { _api.OnVerifiedChanged -= OnVerifiedChanged; _api.OnClanTagChanged -= _tagChanged; } }