以下是一个简单的SCPSL插件SCP1162的编写示例:

using Exiled.API.Features;
using Exiled.Events.EventArgs;
using MEC;
using System;
using System.Collections.Generic;

namespace SCP1162
{
    public class SCP1162 : Plugin<Config>
    {
        private static readonly Random Random = new Random();
        private static readonly Dictionary<Player, List<Pickup>> PlayersItems = new Dictionary<Player, List<Pickup>>();

        public override void OnEnabled()
        {
            base.OnEnabled();

            Exiled.Events.Handlers.Player.PickingUpItem += OnPickingUpItem;
            Exiled.Events.Handlers.Player.DroppingItem += OnDroppingItem;
            Exiled.Events.Handlers.Player.Left += OnPlayerLeft;
        }

        public override void OnDisabled()
        {
            base.OnDisabled();

            Exiled.Events.Handlers.Player.PickingUpItem -= OnPickingUpItem;
            Exiled.Events.Handlers.Player.DroppingItem -= OnDroppingItem;
            Exiled.Events.Handlers.Player.Left -= OnPlayerLeft;
        }

        private void OnPickingUpItem(PickingUpItemEventArgs ev)
        {
            if (!PlayersItems.ContainsKey(ev.Player))
                PlayersItems[ev.Player] = new List<Pickup>();

            PlayersItems[ev.Player].Add(ev.Pickup);
        }

        private void OnDroppingItem(DroppingItemEventArgs ev)
        {
            if (PlayersItems.ContainsKey(ev.Player))
                PlayersItems[ev.Player].Remove(ev.Pickup);
        }

        private void OnPlayerLeft(LeftEventArgs ev)
        {
            if (PlayersItems.ContainsKey(ev.Player))
                PlayersItems.Remove(ev.Player);
        }

        public void RefreshInventory(Player player)
        {
            // 清空玩家背包
            foreach (var pickup in PlayersItems[player])
            {
                Timing.CallDelayed(Config.InventoryRefreshDelay, () =>
                {
                    if (!pickup.IsDestroyed)
                        pickup.Destroy();
                });
            }

            PlayersItems[player].Clear();

            // 随机给予道具
            for (int i = 0; i < Config.ItemsPerRefresh; i++)
            {
                Timing.CallDelayed(Config.InventoryRefreshDelay * i, () =>
                {
                    var item = ItemManager.SpawnRandomItem(player.Position, Random.Next(0, Config.MaxItemSpawnCount));
                    PlayersItems[player].Add(item.Pickup);
                    item.Pickup.ForcePlayer(player);
                });
            }
        }
    }
}

此示例中的插件包含了以下功能:

  • 当玩家捡起道具时,将道具添加到玩家的背包列表中。
  • 当玩家丢弃道具时,将道具从玩家的背包列表中移除。
  • 当玩家离开服务器时,从背包列表中移除该玩家的所有道具。
  • 提供一个方法 RefreshInventory,用于刷新玩家的背包,清空原有的道具,并随机给予新的道具。

请注意,这只是一个简单的示例,你可能需要根据自己的需求进行修改和扩展


原文地址: https://www.cveoy.top/t/topic/h7Pu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录