Files
DanhengServer-OpenSource/GameServer/Command/CommandArg.cs
2024-03-10 16:55:50 +08:00

74 lines
2.1 KiB
C#

using EggLink.DanhengServer.Server;
using EggLink.DanhengServer.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EggLink.DanhengServer.Command
{
public class CommandArg
{
public string Raw { get; }
public List<string> BasicArgs { get; } = [];
public Dictionary<string, string> CharacterArgs { get; } = [];
public Connection? Target { get; set; }
public ICommandSender Sender { get; }
public CommandArg(string raw, ICommandSender sender, Connection? con = null)
{
Raw = raw;
Sender = sender;
var args = raw.Split(' ');
foreach (var arg in args)
{
if (string.IsNullOrEmpty(arg))
{
continue;
}
var character = arg[0];
if (!int.TryParse(character.ToString(), out var _))
{
try
{
CharacterArgs.Add(arg[..1], arg[1..]);
} catch
{
BasicArgs.Add(arg);
}
}
else
{
BasicArgs.Add(arg);
}
}
if (con != null)
{
Target = con;
} else
{
CharacterArgs.TryGetValue("@", out var target);
if (target != null)
{
var connection = Listener.Connections.Values.ToList().Find(item => item.Player?.Uid.ToString() == target);
if (connection != null)
{
Target = connection;
}
}
}
}
public void SendMsg(string msg)
{
Sender.SendMsg(msg);
}
public override string ToString()
{
return $"BasicArg: {BasicArgs.ToArrayString()}. CharacterArg: {CharacterArgs.ToJsonString()}.";
}
}
}