为了账号安全,请及时绑定邮箱和手机立即绑定

我的问题是关于向对象添加更多字符串条目

我的问题是关于向对象添加更多字符串条目

Go
千巷猫影 2022-01-09 10:46:57
我的问题是关于如何向 MakeSpawner 对象添加多个字符串?此创建的对象有 13 个单独的字符串条目。在当前配置中,它生成 3 个单独的 spawn 对象,每个对象都有一个字符串。我需要用至少八个单独的刺条目生成一个项目。namespace Server{    public class GenItems    {        private static int m_Count;        private const int ICount = 8;        private const int HomeRange = 20;        private const bool TotalRespawn = false;        public static void Initialize()        {            CommandSystem.Register("GenItems", AccessLevel.Administrator, new CommandEventHandler(Generate_OnCommand));        }        [Usage("GenItems")]        [Description("Generates Items")]        private static void Generate_OnCommand(CommandEventArgs e)        {            Parse(e.Mobile);        }        public static void Parse(Mobile from)        {            from.SendMessage("Generating all items...");   MakeSpawner(new string[] { "aaa", "bbb", "ccc" },  2850, 810, 0);        }        private static Queue m_ToDelete = new Queue();        public static void ClearSpawners(int x, int y, int z)        {            IPooledEnumerable eable = Map.Sample.GetItemsInRange(new Point3D(x, y, z), 0);            foreach (Item item in eable)            {                if (item is Spawner && item.Z == z)                    m_ToDelete.Enqueue(item);            }            eable.Free();            while (m_ToDelete.Count > 0)                ((Item)m_ToDelete.Dequeue()).Delete();        }        private static void MakeSpawner(string[] types, int x, int y, int z)        {            if (types.Length == 0)                return;            ClearSpawners(x, y, z);                {                    sp.Respawn();                    sp.BringToHome();                }                ++m_Count;            }        }    }}我没有想法,因为我还是一个学习 C# 的新手。
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

为了允许您将多个生物名称传递给Spawner,您应该Spawner像这样更改构造函数:


[Constructable]

public Spawner(params string[] creatureName ) : base( 0x1f13 )

{

    InitSpawn( 1, TimeSpan.FromMinutes( 5 ), TimeSpan.FromMinutes( 10 ), 0, 4, creaturesName.ToList() );

}

然后MakeSpawner像这样修改你的方法:


private static void MakeSpawner(string[] types, int x, int y, int z)

{

    if (types.Length == 0)

        return;


    ClearSpawners(x, y, z);


    Spawner sp = new Spawner(types);


    sp.Count = ICount;

    sp.HomeRange = HomeRange;


    sp.MoveToWorld(new Point3D(x, y, z), Map.Sample);


    if (TotalRespawn)

    {

        sp.Respawn();

        sp.BringToHome();

    }


    ++m_Count;


}

注意:params修饰符允许您将单个字符串 ( new Spawner("a"))、多个字符串 ( new Spanwer("a", "b", "c")) 或字符串数组 ( new Spanwer(types)) 传递给同一方法。我还稍微修改了您的代码,以利用 LINQ( using System.Linq) 转换为List<string>.


现在,我唯一担心的是ClearSpawners(x, y, z);:如果您添加多个具有相同 x,y,z 的单独生成器,它将(可能)清除旧生成器。我猜想,因为这些是 Spawner,但可能没问题,而且每个位置只有一个 Spawner。


查看完整回答
反对 回复 2022-01-09
  • 1 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信