Hello, I have an issue with Clan Teams in my console. I have this:

Failed to call hook 'OnClanUpdate' on plugin 'ClanTeam v1.0.6' (NullReferenceException: Object reference not set to an instance of an object)
  at Oxide.Plugins.ClanTeam.IsAnOwner (BasePlayer player) [0x0003d] in <ef7c786903244daf85f6cfe4b5e363c8>:0 
  at Oxide.Plugins.ClanTeam.GenerateClanTeam (System.Collections.Generic.List`1[T] memberIds) [0x000d3] in <ef7c786903244daf85f6cfe4b5e363c8>:0 
  at Oxide.Plugins.ClanTeam.OnClanUpdate (System.String tag) [0x00008] in <ef7c786903244daf85f6cfe4b5e363c8>:0 
  at Oxide.Plugins.ClanTeam.DirectCallHook (System.String name, System.Object& ret, System.Object[] args) [0x00339] in <ef7c786903244daf85f6cfe4b5e363c8>:0 
  at Oxide.Plugins.CSharpPlugin.InvokeMethod (Oxide.Core.Plugins.HookMethod method, System.Object[] args) [0x00079] in <42f9bedc659b4f4786eb778d3cd58968>:0 
  at Oxide.Core.Plugins.CSPlugin.OnCallHook (System.String name, System.Object[] args) [0x000de] in <15f61ddda771464d8246ebdce8ff4811>:0 
  at Oxide.Core.Plugins.Plugin.CallHook (System.String hook, System.Object[] args) [0x00060] in <15f61ddda771464d8246ebdce8ff4811>:0

So I did a quick search with AI following the updates since on rust. He gave me a file. completely redone and now I have no more issues in play :

  • Stop your server (or at least unload the old version: oxide.unload ClanTeam).
    • Replace the content of the file oxide/plugins/ClanTeam.cs with the code above.
    • Reload the plugin: oxide.reload ClanTeam.

 

// Requires: Clans

using Newtonsoft.Json.Linq;
using Oxide.Core.Plugins;
using System.Collections.Generic;

namespace Oxide.Plugins
{
    [Info("Clan Team", "deivismac", "1.0.6")]
    [Description("Adds clan members to the same team")]
    class ClanTeam : CovalencePlugin
    {
        #region Definitions

        [PluginReference]
        private Plugin Clans;

        private readonly Dictionary<string, List<ulong>> clans = new Dictionary<string, List<ulong>>();

        #endregion Definitions

        #region Functions

        private bool CompareTeams(List<ulong> currentIds, List<ulong> clanIds)
        {
            foreach (ulong clanId in clanIds)
            {
                if (!currentIds.Contains(clanId))
                {
                    return false;
                }
            }

            return true;
        }

        private void GenerateClanTeam(List<ulong> memberIds)
        {
            if (memberIds == null || memberIds.Count == 0) return;

            if (clans.ContainsKey(ClanTag(memberIds[0])))
            {
                clans.Remove(ClanTag(memberIds[0]));
            }

            clans[ClanTag(memberIds[0])] = new List<ulong>();
            RelationshipManager.PlayerTeam team = RelationshipManager.ServerInstance.CreateTeam();

            foreach (ulong memberId in memberIds)
            {
                BasePlayer player = BasePlayer.FindByID(memberId);
                if (player != null)
                {
                    if (player.currentTeam != 0UL)
                    {
                        RelationshipManager.PlayerTeam current = RelationshipManager.ServerInstance.FindTeam(player.currentTeam);
                        current?.RemovePlayer(player.userID);
                    }
                    team.AddPlayer(player);

                    clans[ClanTag(memberId)].Add(player.userID);

                    if (IsAnOwner(player))
                    {
                        team.SetTeamLeader(player.userID);
                    }
                }
            }
        }

        private bool IsAnOwner(BasePlayer player)
        {
            string clanTag = Clans.Call<string>("GetClanOf", player.userID);
            if (string.IsNullOrEmpty(clanTag)) return false;

            JObject clanInfo = Clans.Call<JObject>("GetClan", clanTag);
            if (clanInfo == null) return false;

            string owner = clanInfo["owner"]?.ToString();
            return owner == player.UserIDString;
        }

        private string ClanTag(ulong memberId)
        {
            return Clans.Call<string>("GetClanOf", memberId) ?? string.Empty;
        }

        private List<ulong> ClanPlayers(BasePlayer player)
        {
            string tag = Clans.Call<string>("GetClanOf", player.userID);
            if (string.IsNullOrEmpty(tag)) return new List<ulong>();

            JObject clanInfo = Clans.Call<JObject>("GetClan", tag);
            if (clanInfo == null) return new List<ulong>();

            return clanInfo["members"]?.ToObject<List<ulong>>() ?? new List<ulong>();
        }

        private List<ulong> ClanPlayersTag(string tag)
        {
            if (string.IsNullOrEmpty(tag)) return new List<ulong>();
            JObject clanInfo = Clans.Call<JObject>("GetClan", tag);
            if (clanInfo == null) return new List<ulong>();
            return clanInfo["members"]?.ToObject<List<ulong>>() ?? new List<ulong>();
        }

        #endregion Functions

        #region Hooks

        private void OnClanCreate(string tag)
        {
            timer.Once(1f, () =>
            {
                List<ulong> clanPlayers = new List<ulong>();
                JObject clanInfo = Clans.Call<JObject>("GetClan", tag);
                if (clanInfo == null) return;

                JArray players = clanInfo["members"] as JArray;
                if (players == null) return;

                foreach (string memberId in players)
                {
                    ulong clanId;
                    ulong.TryParse(memberId, out clanId);
                    if (clanId != 0UL)
                    {
                        clanPlayers.Add(clanId);
                    }
                }
                GenerateClanTeam(clanPlayers);
            });
        }

        private void OnClanUpdate(string tag)
        {
            if (string.IsNullOrEmpty(tag)) return;
            var clanPlayers = ClanPlayersTag(tag);
            if (clanPlayers.Count == 0) return;
            GenerateClanTeam(clanPlayers);
        }

        private void OnClanDestroy(string tag)
        {
            if (!clans.ContainsKey(tag)) return;

            BasePlayer player = BasePlayer.FindByID(clans[tag][0]);
            if (player != null)
            {
                RelationshipManager.PlayerTeam team = RelationshipManager.ServerInstance.FindTeam(player.currentTeam);
                if (team != null)
                {
                    foreach (ulong memberId in clans[tag])
                    {
                        team.RemovePlayer(memberId);
                    }
                    RelationshipManager.ServerInstance.DisbandTeam(team);
                }
                clans.Remove(tag);
            }
        }

        private void OnPlayerSleepEnded(BasePlayer player)
        {
            if (player == null) return;

            string clanTag = ClanTag(player.userID);
            if (!string.IsNullOrEmpty(clanTag))
            {
                List<ulong> clanPlayers = ClanPlayers(player);
                if (clanPlayers.Count == 0) return;

                if (player.currentTeam != 0UL)
                {
                    RelationshipManager.PlayerTeam team = RelationshipManager.ServerInstance.FindTeam(player.currentTeam);
                    if (team != null && CompareTeams(team.members, clanPlayers))
                    {
                        return;
                    }
                }

                GenerateClanTeam(clanPlayers);
            }
        }

        #endregion Hooks
    }
}

If that helped you, I am delighted, I am not a modder or something else, I just used AI to find a solution that worked for me