Иконка ресурса

FREE RugSkinner : 1.0.0 1.0.0

Нет прав для скачивания
C#:
using Oxide.Core;
using Oxide.Core.Configuration;
using Rust;
using System.Collections.Generic;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("RugSkinner", "Chernarust", "1.0.0")]
    [Description("Automatically adds a bear rug to the player's inventory when they skin a bear or polar bear, with permissions support and a one-rug limit per bear using data storage.")]

    public class RugSkinner : RustPlugin
    {
        private const string BearRugShortName = "rug.bear";
        private const string PermissionUse = "rugskinner.use";
        private DynamicConfigFile bearDataFile;

        private StoredData storedData;

        private class StoredData
        {
            public HashSet<uint> SkinnedBearIDs = new HashSet<uint>();
        }

        private void Init()
        {
            permission.RegisterPermission(PermissionUse, this);
            bearDataFile = Interface.Oxide.DataFileSystem.GetFile("RugSkinner");
            LoadData();
            Puts("RugSkinner loaded!");
        }

        private void OnDispenserGather(ResourceDispenser dispenser, BaseEntity entity, Item item)
        {
            if (dispenser == null || entity == null || item == null) return;

            var player = entity.ToPlayer();
            if (player == null || !permission.UserHasPermission(player.UserIDString, PermissionUse)) return;

            if ((dispenser.name.Contains("bear") || dispenser.name.Contains("polarbear")) && item.info.shortname == "fat.animal")
            {
                uint bearID = (uint)dispenser.GetInstanceID();

                if (!storedData.SkinnedBearIDs.Contains(bearID))
                {
                    storedData.SkinnedBearIDs.Add(bearID);
                    SaveData();
                    GiveBearRug(player, bearID);
                }
            }
        }

        private void GiveBearRug(BasePlayer player, uint bearID)
        {
            var bearRugDefinition = ItemManager.FindItemDefinition(BearRugShortName);
            if (bearRugDefinition == null)
            {
                Puts("Bear rug item definition not found!");
                return;
            }

            var bearRug = ItemManager.Create(bearRugDefinition, 1);
            if (!player.inventory.GiveItem(bearRug))
            {
                DropItem(bearRug, player.transform.position);
                player.ChatMessage("Your inventory is full. The bear rug has been dropped on the ground.");
            }
            else
            {
                player.ChatMessage("You received a bear rug!");
            }

            // Remove bear ID from tracking after a short delay to allow future skinning
            timer.Once(10f, () => RemoveBearID(bearID));
        }

        private void DropItem(Item item, Vector3 position)
        {
            var rugEntity = item.Drop(position, Vector3.zero);
            if (rugEntity == null)
            {
                Puts("Failed to drop the bear rug item. Trying again.");
                // Retry dropping the item
                item.Drop(position + Vector3.up, Vector3.zero);
            }
        }

        private void RemoveBearID(uint bearID)
        {
            storedData.SkinnedBearIDs.Remove(bearID);
            SaveData();
        }

        private void LoadData()
        {
            try
            {
                storedData = bearDataFile.ReadObject<StoredData>();
            }
            catch
            {
                storedData = new StoredData();
            }
        }

        private void SaveData()
        {
            bearDataFile.WriteObject(storedData);
        }

        private void OnServerSave()
        {
            SaveData(); // Save data on server save
        }

        private void Unload()
        {
            SaveData(); // Save data on plugin unload
        }
    }
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху