Broken on Staging need an Update for Thursday

Broken on Staging need an Update for Thursday

AliasSystem - Failed to compile: Argument 1: cannot convert from 'System.Collections.Generic.List<Facepunch.StringView>' to 'System.Collections.Generic.List<string>' | Line: 264, Pos: 24

Here is a fixed version:

using System.Collections.Generic;
using Oxide.Game.Rust.Libraries;
using System.Linq;
using Oxide.Core;
using System;

namespace Oxide.Plugins
{
    [Info("Alias System", "LaserHydra", "2.1.3", ResourceId = 1307)]
    [Description("Setup alias for chat and console commands")]
    class AliasSystem : RustPlugin
    {
		const string permadmin = "aliassystem.admin";
		const string permuse = "aliassystem.use";

		class Alias
		{
			public string original;
			public string alias;
			public string originaltype;
			public string aliastype;
			public string permission = permuse;
			
			public Alias(string aliasname, string Original)
			{
				original = Original;
				alias = aliasname;
				
				if(aliasname.StartsWith("/")) aliastype = "chat";
				else if(!aliasname.StartsWith("/")) aliastype = "console";
				
				if(Original.StartsWith("/")) originaltype = "chat";
				else if(!Original.StartsWith("/")) originaltype = "console";
			}
			
			public Alias()
			{
			}
		}
		
		class Data
		{
			public List<Alias> alias = new List<Alias>();
			
			public Data()
			{
			}
		}
		
		Data data;
		
		Data LoadData() 
		{
			return Interface.Oxide.DataFileSystem.ReadObject<Data>("AliasSystem_Data");
		}
		
		void SaveData()
		{
			Interface.Oxide.DataFileSystem.WriteObject("AliasSystem_Data", data);
		}
		
		void Loaded()
		{	
			data = LoadData();
			LoadConfig();
			
			permission.RegisterPermission(permadmin, this);
			permission.RegisterPermission(permuse, this);

            foreach(Alias current in data.alias)
            {
				if(current.aliastype == "chat")
				{
					cmd.AddChatCommand(current.alias.Substring(1, current.alias.Length - 1), this, "ChatAlias");
				}
				else if(current.aliastype == "console")
				{
					cmd.AddConsoleCommand("global." + current.alias, this, "ConsoleAlias");
				}
            }
		}
		
		void LoadConfig()
		{
		}
		
		void LoadDefaultConfig()
		{
			Puts("Generating new config file...");
			LoadConfig();
		}
		
		void ChatAlias(BasePlayer player, string command, string[] args)
		{
			if(GetAliasByName("/" + command) == null) return;
			
			Alias alias = GetAliasByName("/" + command);
			
			if(!permission.UserHasPermission(player.userID.ToString(), alias.permission)) 
			{
				SendChatMessage(player, "Command Alias", "You have no permission to use this command.");
				return;
			}
			
			if(alias.originaltype == "chat")
				RunChatCommand(player, command, ListToString(args.ToList(), 0, " "));
			else if(alias.originaltype == "console")
				RunConsoleCommand(player, command, ListToString(args.ToList(), 0, " "));
		}
		
		void ConsoleAlias(ConsoleSystem.Arg arg)
		{
			BasePlayer player = (BasePlayer)arg?.Connection?.player ?? null;
			if(player == null) return;
			
			string command = arg?.cmd?.FullName?.Replace("global.", "") ?? "";
			
			if(GetAliasByName(command) == null) return;
			
			Alias alias = GetAliasByName(command);
			
			if(!permission.UserHasPermission(player.userID.ToString(), alias.permission)) 
			{
				SendChatMessage(player, "Command Alias", "You have no permission to use this command.");
				return;
			}
			
			if(alias.originaltype == "chat")
				RunChatCommand(player, command, ArgToString(arg, 0, " "));
			else if(alias.originaltype == "console")
				RunConsoleCommand(player, command, ArgToString(arg, 0, " "));
		}
		
		[ChatCommand("alias")]
		void cmdAlias(BasePlayer player, string command, string[] args)
		{
			if(!permission.UserHasPermission(player.userID.ToString(), permadmin)) 
			{
				SendChatMessage(player, "Command Alias", "You have no permission to use this command.");
				return;
			}
			
			if(args.Length < 1)
			{
				SendChatMessage(player, "Command Alias", "\n/alias add <alias> <command>\n/alias remove <alias>");
				return;
			}
			
			switch(args[0])
			{
				case "add":
					
					if(args.Length < 3)
					{
						SendChatMessage(player, "Command Alias", "Syntax: /alias add <alias> <original>");
						return;
					}
					
					data.alias.Add(new Alias(args[1], args[2]));
					SaveData();
					
					if(args[1].StartsWith("/")) cmd.AddChatCommand(args[1].Substring(1, args[1].Length - 1), this, "ChatAlias");
					else cmd.AddConsoleCommand("global." + args[1], this, "ConsoleAlias");
					
					SendChatMessage(player, "Command Alias", $"Alias {args[1]} successfuly set for command {args[2]}");
					
					break;
					
				case "remove":
				
					if(args.Length < 2)
					{
						SendChatMessage(player, "Command Alias", "Syntax: /alias remove <alias>");
						return;
					}
					
					Alias alias = GetAliasByName(args[1]);
					
					if(data.alias.Contains(alias))
					{
						data.alias.Remove(alias);
						SaveData();
					
						SendChatMessage(player, "Command Alias", $"Alias {args[1]} successfuly removed.");	
					}
					else SendChatMessage(player, "Command Alias", $"Alias {args[1]} does not exist.");
					
					break;
					
				default:
					break;
			}
		}
		
		Alias GetAliasByName(string aliasname)
		{
			foreach(Alias current in data.alias)
            {
				if(current.alias == aliasname) return current;
            }
			
			return null;
		}
		
		void RunChatCommand(BasePlayer player, string command, string args)
		{
			Alias alias = GetAliasByName(command);
			if(alias == null) alias = GetAliasByName("/" + command);
			
			player.SendConsoleCommand("chat.say", "/" + $"{alias.original.Substring(1, alias.original.Length - 1).Replace("'", "\"")} {args.Replace("'", "\"")}");
		}
		
		void RunConsoleCommand(BasePlayer player, string command, string args)
		{
			Alias alias = GetAliasByName(command);
			if(alias == null) alias = GetAliasByName("/" + command);
			
			player.SendConsoleCommand(alias.original.Replace("'", "\""), args.Replace("'", "\""));
		}
		
        #region UsefulMethods
        //--------------------------->   Player finding   <---------------------------//

		BasePlayer GetPlayer(string searchedPlayer, BasePlayer executer, string prefix)
        {
            BasePlayer targetPlayer = null;
            List<string> foundPlayers = new List<string>();
            string searchedLower = searchedPlayer.ToLower();
            
			foreach(BasePlayer player in BasePlayer.activePlayerList)
			{
				if(player.displayName.ToLower().Contains(searchedLower)) foundPlayers.Add(player.displayName);
			}
			
			switch(foundPlayers.Count)
			{
				case 0:
					SendChatMessage(executer, prefix, "The Player can not be found.");
					break;
					
				case 1:
					targetPlayer = BasePlayer.Find(foundPlayers[0]);
					break;
				
				default:
					string players = ListToString(foundPlayers, 0, ", ");
					SendChatMessage(executer, prefix, "Multiple matching players found: \n" + players);
					break;
			}
			
            return targetPlayer;
        }

        //---------------------------->   Converting   <----------------------------//

        string ListToString(List<string> list, int first, string seperator)
		{
			return String.Join(seperator, list.Skip(first).ToArray());
		}
		
		string ArgToString(ConsoleSystem.Arg arg, int first, string seperator)
		{
			if(arg.Args == null || arg.Args.Count() < 1) return string.Empty;
			 return ListToString(arg.Args.Select(x => (string)x).ToArray().ToList(), first, seperator);
		}

        //------------------------------>   Config   <------------------------------//

        void SetConfig(string Arg1, object Arg2, object Arg3 = null, object Arg4 = null)
		{
			if(Arg4 == null)
			{
				Config[Arg1, Arg2.ToString()] = Config[Arg1, Arg2.ToString()] ?? Arg3;
			}
			else if(Arg3 == null)
			{
				Config[Arg1] = Config[Arg1] ?? Arg2;
			}
			else
			{
				Config[Arg1, Arg2.ToString(), Arg3.ToString()] = Config[Arg1, Arg2.ToString(), Arg3.ToString()] ?? Arg4;
			}
		}

        //---------------------------->   Chat Sending   <----------------------------//

        void BroadcastChat(string prefix, string msg = null) => PrintToChat(msg == null ? prefix : "<color=#00FF8D>" + prefix + "</color>: " + msg);

        void SendChatMessage(BasePlayer player, string prefix, string msg = null) => SendReply(player, msg == null ? prefix : "<color=#00FF8D>" + prefix + "</color>: " + msg);

        //---------------------------------------------------------------------------//
        #endregion
    }
}